Fix a bug ByteReadableBufferWrapper. We should set new buffer's limit before changing the original buffer's position

This commit is contained in:
Xiao Hang 2016-02-19 16:24:59 -08:00
parent 8d0267fc41
commit 52b3db2c06
2 changed files with 12 additions and 1 deletions

View File

@ -288,8 +288,8 @@ public final class ReadableBuffers {
public ByteReadableBufferWrapper readBytes(int length) {
checkReadable(length);
ByteBuffer buffer = bytes.duplicate();
bytes.position(bytes.position() + length);
buffer.limit(bytes.position() + length);
bytes.position(bytes.position() + length);
return new ByteReadableBufferWrapper(buffer);
}

View File

@ -121,6 +121,17 @@ public abstract class ReadableBufferTestBase {
assertEquals(msg.length() - 2, buffer.readableBytes());
}
@Test
public void partialReadToReadableBufferShouldSucceed() {
ReadableBuffer buffer = buffer();
ReadableBuffer newBuffer = buffer.readBytes(2);
assertEquals(2, newBuffer.readableBytes());
assertEquals(msg.length() - 2, buffer.readableBytes());
byte[] array = new byte[2];
newBuffer.readBytes(array, 0, 2);
assertArrayEquals(new byte[] {'h', 'e'}, Arrays.copyOfRange(array, 0, 2));
}
protected abstract ReadableBuffer buffer();
private static String repeatUntilLength(String toRepeat, int length) {