CodedInputStream.getTotalBytesRead(); patch from Michael Kucharski.
This commit is contained in:
Родитель
6ba3df0d32
Коммит
6493368285
|
@ -78,3 +78,5 @@ Patch contributors:
|
|||
* Detect whether zlib is new enough in configure script.
|
||||
Evan Jones <evanj@mit.edu>
|
||||
* Optimize Java serialization code when writing a small message to a stream.
|
||||
Michael Kucharski <m.kucharski@gmail.com>
|
||||
* Added CodedInputStream.getTotalBytesRead().
|
||||
|
|
|
@ -467,7 +467,9 @@ public final class CodedInputStream {
|
|||
/**
|
||||
* The total number of bytes read before the current buffer. The total
|
||||
* bytes read up to the current position can be computed as
|
||||
* {@code totalBytesRetired + bufferPos}.
|
||||
* {@code totalBytesRetired + bufferPos}. This value may be negative if
|
||||
* reading started in the middle of the current buffer (e.g. if the
|
||||
* constructor that takes a byte array and an offset was used).
|
||||
*/
|
||||
private int totalBytesRetired;
|
||||
|
||||
|
@ -489,6 +491,7 @@ public final class CodedInputStream {
|
|||
this.buffer = buffer;
|
||||
bufferSize = off + len;
|
||||
bufferPos = off;
|
||||
totalBytesRetired = -off;
|
||||
input = null;
|
||||
}
|
||||
|
||||
|
@ -496,6 +499,7 @@ public final class CodedInputStream {
|
|||
buffer = new byte[BUFFER_SIZE];
|
||||
bufferSize = 0;
|
||||
bufferPos = 0;
|
||||
totalBytesRetired = 0;
|
||||
this.input = input;
|
||||
}
|
||||
|
||||
|
@ -546,7 +550,7 @@ public final class CodedInputStream {
|
|||
* Resets the current size counter to zero (see {@link #setSizeLimit(int)}).
|
||||
*/
|
||||
public void resetSizeCounter() {
|
||||
totalBytesRetired = 0;
|
||||
totalBytesRetired = -bufferPos;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -615,6 +619,14 @@ public final class CodedInputStream {
|
|||
return bufferPos == bufferSize && !refillBuffer(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* The total bytes read up to the current position. Calling
|
||||
* {@link #resetSizeCounter()} resets this value to zero.
|
||||
*/
|
||||
public int getTotalBytesRead() {
|
||||
return totalBytesRetired + bufferPos;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called with {@code this.buffer} is empty to read more bytes from the
|
||||
* input. If {@code mustSucceed} is true, refillBuffer() gurantees that
|
||||
|
|
|
@ -434,6 +434,7 @@ public class CodedInputStreamTest extends TestCase {
|
|||
new SmallBlockInputStream(new byte[256], 8));
|
||||
input.setSizeLimit(16);
|
||||
input.readRawBytes(16);
|
||||
assertEquals(16, input.getTotalBytesRead());
|
||||
|
||||
try {
|
||||
input.readRawByte();
|
||||
|
@ -443,7 +444,10 @@ public class CodedInputStreamTest extends TestCase {
|
|||
}
|
||||
|
||||
input.resetSizeCounter();
|
||||
assertEquals(0, input.getTotalBytesRead());
|
||||
input.readRawByte(); // No exception thrown.
|
||||
input.resetSizeCounter();
|
||||
assertEquals(0, input.getTotalBytesRead());
|
||||
|
||||
try {
|
||||
input.readRawBytes(16); // Hits limit again.
|
||||
|
@ -477,10 +481,13 @@ public class CodedInputStreamTest extends TestCase {
|
|||
public void testReadFromSlice() throws Exception {
|
||||
byte[] bytes = bytes(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
|
||||
CodedInputStream in = CodedInputStream.newInstance(bytes, 3, 5);
|
||||
assertEquals(0, in.getTotalBytesRead());
|
||||
for (int i = 3; i < 8; i++) {
|
||||
assertEquals(i, in.readRawByte());
|
||||
assertEquals(i-2, in.getTotalBytesRead());
|
||||
}
|
||||
// eof
|
||||
assertEquals(0, in.readTag());
|
||||
assertEquals(5, in.getTotalBytesRead());
|
||||
}
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче