in hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/Hessian2Output.java [1081:1132]
public void writeBytes(byte[] buffer, int offset, int length)
throws IOException {
if (buffer == null) {
if (SIZE < _offset + 16)
flushBuffer();
_buffer[_offset++] = (byte) 'N';
} else {
while (SIZE - _offset - 3 < length) {
int sublen = SIZE - _offset - 3;
if (sublen < 16) {
flushBuffer();
sublen = SIZE - _offset - 3;
if (length < sublen)
sublen = length;
}
_buffer[_offset++] = (byte) BC_BINARY_CHUNK;
_buffer[_offset++] = (byte) (sublen >> 8);
_buffer[_offset++] = (byte) sublen;
System.arraycopy(buffer, offset, _buffer, _offset, sublen);
_offset += sublen;
length -= sublen;
offset += sublen;
flushBuffer();
}
if (SIZE < _offset + 16)
flushBuffer();
if (length <= BINARY_DIRECT_MAX) {
_buffer[_offset++] = (byte) (BC_BINARY_DIRECT + length);
} else if (length <= BINARY_SHORT_MAX) {
_buffer[_offset++] = (byte) (BC_BINARY_SHORT + (length >> 8));
_buffer[_offset++] = (byte) (length);
} else {
_buffer[_offset++] = (byte) 'B';
_buffer[_offset++] = (byte) (length >> 8);
_buffer[_offset++] = (byte) (length);
}
System.arraycopy(buffer, offset, _buffer, _offset, length);
_offset += length;
}
}