all tests pass for PackedInputStream
This commit is contained in:
parent
8f34106347
commit
75a0332921
2 changed files with 22 additions and 7 deletions
|
@ -25,13 +25,10 @@ public final class PackedInputStream implements ReadableByteChannel {
|
|||
|
||||
ByteBuffer inBuf = this.inner.getReadBuffer();
|
||||
|
||||
|
||||
while (true) {
|
||||
|
||||
byte tag = 0;
|
||||
|
||||
//if (outBuf
|
||||
|
||||
if (inBuf.remaining() < 10) {
|
||||
if (outBuf.remaining() == 0) {
|
||||
return len;
|
||||
|
@ -91,11 +88,29 @@ public final class PackedInputStream implements ReadableByteChannel {
|
|||
|
||||
|
||||
if (inBuf.remaining() >= runLength) {
|
||||
|
||||
//# Fast path.
|
||||
ByteBuffer slice = inBuf.slice();
|
||||
slice.limit(runLength);
|
||||
outBuf.put(slice);
|
||||
inBuf.position(inBuf.position() + runLength);
|
||||
} else {
|
||||
//# Copy over the first buffer, then do one big read for the rest.
|
||||
runLength -= inBuf.remaining();
|
||||
outBuf.put(inBuf);
|
||||
|
||||
ByteBuffer slice = outBuf.slice();
|
||||
slice.limit(runLength);
|
||||
|
||||
this.inner.read(slice);
|
||||
outBuf.position(outBuf.position() + runLength);
|
||||
|
||||
if (outBuf.remaining() == 0) {
|
||||
return len;
|
||||
} else {
|
||||
inBuf = this.inner.getReadBuffer();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (outBuf.remaining() == 0) {
|
||||
|
|
|
@ -26,9 +26,9 @@ class SerializePackedSuite extends FunSuite {
|
|||
val bytes = new Array[Byte](unpacked.length);
|
||||
val n = packedInputStream.read(ByteBuffer.wrap(bytes));
|
||||
|
||||
//(n) should equal (unpacked.length);
|
||||
(n) should equal (unpacked.length);
|
||||
|
||||
//(bytes) should equal (unpacked);
|
||||
(bytes) should equal (unpacked);
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue