[ 
https://issues.apache.org/jira/browse/CODEC-259?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16908002#comment-16908002
 ] 

James Howe commented on CODEC-259:
----------------------------------

Surely this should solve all {{ByteBuffer}} implementation issues?

{code:java}
protected static char[] encodeHex(final ByteBuffer data, final char[] toDigits) 
{
    byte[] bytes = new byte[data.capacity()];
    data.get(bytes, 0, data.capacity());
    return encodeHex(bytes, toDigits);
}
{code}

Arguably it should also change (or additional methods added) to consume a 
buffer properly, obeying position and limit.
{code:java}
protected static char[] encodeHex(final ByteBuffer data, final char[] toDigits) 
{
    byte[] bytes = new byte[data.remaining()];
    data.get(bytes);
    return encodeHex(bytes, toDigits);
}
{code}

> Broken direct java.nio.ByteBuffer support in 
> org.apache.commons.codec.binary.Hex
> --------------------------------------------------------------------------------
>
>                 Key: CODEC-259
>                 URL: https://issues.apache.org/jira/browse/CODEC-259
>             Project: Commons Codec
>          Issue Type: Bug
>    Affects Versions: 1.11, 1.12
>            Reporter: Tomas Shestakov
>            Priority: Major
>             Fix For: 1.14
>
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> java.nio.ByteBuffer support in org.apache.commons.codec.binary.Hex does not 
> work properly for direct ByteBuffer created by ByteBuffer.allocateDirect 
> method and for heap ByteBuffers which arrayOffset() or byteBuffer.position() 
> greater than zero or byteBuffer.remaining() is not equal 
> byteBuffer.array().{color:#660e7a}length{color}:
> This test will produce java.lang.UnsupportedOperationException
> {code:java}
> @Test
> public void testEncodeHexByteBufferEmpty() {
>     assertTrue(Arrays.equals(new char[0], 
> Hex.encodeHex(ByteBuffer.allocateDirect(0))));
> }
> {code}
> This one will fail
> {code:java}
> @Test
> public void testEncodeHexByteBufferHelloWorldLowerCaseHex() {
>     final ByteBuffer b = ByteBuffer.wrap(StringUtils.getBytesUtf8("[Hello 
> World]"), 1, 11);
>     final String expected = "48656c6c6f20576f726c64";
>     char[] actual;
>     actual = Hex.encodeHex(b);
>     assertEquals(expected, new String(actual));
>     actual = Hex.encodeHex(b, true);
>     assertEquals(expected, new String(actual));
>     actual = Hex.encodeHex(b, false);
>     assertFalse(expected.equals(new String(actual)));
> }
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.14#76016)

Reply via email to