Details
-
Improvement
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
9.2
-
None
-
New
Description
Because we don't know the length of slice, writeBytes will always write byte one after another instead of writing a block of bytes.
May be we could return both offset and length in ByteBlockPool#allocSlice?
1. BYTE_BLOCK_SIZE is 32768, offset is at most 15 bits.
2. slice size is at most 200, so it could fit in 8 bits.
So we could put them together into an int -------- offset | length
There are only two places where this function is used,the cost of change it is relatively small.
When allocSlice could return the offset and length of new Slice, we could change writeBytes like below
// write block of bytes each time while(remaining > 0 ) { int offsetAndLength = allocSlice(bytes, offset); length = min(remaining, (offsetAndLength & 0xff) - 1); offset = offsetAndLength >> 8; System.arraycopy(src, srcPos, bytePool.buffer, offset, length); remaining -= length; offset += (length + 1); }
If it could work, I'd like to raise a pr.
Attachments
Issue Links
- links to