in hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/Hessian2Input.java [2032:2115]
public int readByte()
throws IOException {
if (_chunkLength > 0) {
_chunkLength--;
if (_chunkLength == 0 && _isLastChunk)
_chunkLength = END_OF_DATA;
return read();
} else if (_chunkLength == END_OF_DATA) {
_chunkLength = 0;
return -1;
}
int tag = read();
switch (tag) {
case 'N':
return -1;
case 'B':
case BC_BINARY_CHUNK: {
_isLastChunk = tag == 'B';
_chunkLength = (read() << 8) + read();
int value = parseByte();
// special code so successive read byte won't
// be read as a single object.
if (_chunkLength == 0 && _isLastChunk)
_chunkLength = END_OF_DATA;
return value;
}
case 0x20:
case 0x21:
case 0x22:
case 0x23:
case 0x24:
case 0x25:
case 0x26:
case 0x27:
case 0x28:
case 0x29:
case 0x2a:
case 0x2b:
case 0x2c:
case 0x2d:
case 0x2e:
case 0x2f: {
_isLastChunk = true;
_chunkLength = tag - 0x20;
int value = parseByte();
// special code so successive read byte won't
// be read as a single object.
if (_chunkLength == 0)
_chunkLength = END_OF_DATA;
return value;
}
case 0x34:
case 0x35:
case 0x36:
case 0x37: {
_isLastChunk = true;
_chunkLength = (tag - 0x34) * 256 + read();
int value = parseByte();
// special code so successive read byte won't
// be read as a single object.
if (_chunkLength == 0)
_chunkLength = END_OF_DATA;
return value;
}
default:
throw expect("binary", tag);
}
}