The initial capacity of the internal arrays
The size of each buffer
If we are splicing data keep using the existing buffer if there is at least this much space in it
If writing length prefixed data we have a gap then compact the array if the written data is less than this amount
If writing a Byte Array that is over this length then splice it in. If it's under this length then just write it to our buffers
Appendable Implementation
Appendable Implementation
Appendable Implementation
Appendable Implementation
Appendable Implementation
Appendable Implementation
How many bytes are available in the current buffer
How many bytes are available in the current buffer
Public accessor for tests
Public accessor for tests
Ensure that there are at least size bytes available in the current buffer (or point to a new buffer).
Ensure that there are at least size bytes available in the current buffer (or point to a new buffer).
This is for writing data that needs to have it's length prefixed when the prefixed length is variable.
This is for writing data that needs to have it's length prefixed when the prefixed length is variable. e.g. When write Protocol Buffers length delimited fields the length is a varint.
This method takes the maximum prefix size we expect to write, a function that performs the writing the data, and a function that takes the number of bytes written via writeData and performs the length prefix write. If the length prefix write is less than the maxPrefixSize parameter then the array will either be compacted or split into two.
Remove or Skip over the bytes at the starting index to length.
Remove or Skip over the bytes at the starting index to length.
These are expected to be contiguous bytes in one of the buffers. The buffer will be looked up based on the start index and then data will either be compacted or spliced around based on how much data comes after the skipped bytes
Directly use this byte array (zero-copy).
Directly use this byte array (zero-copy). If there are bytes left in our current buffer to make it useful then we will splice this into our current array by saving the current array, saving this array, and then using the rest of the original array as our current buffer with updated start/offset/length
Create a byte array out of the current data
OutputStream Implementation
OutputStream Implementation
OutputStream Implementation
OutputStream Implementation
OutputStream Implementation
OutputStream Implementation
Optimized for when we know the characters are ASCII
Write the current data in the buffer to an OutputStream
Returns the number of bytes written
Returns the number of bytes written
A ByteArrayOutputStream implementation optimized for writing binary serialized data (e.g. Protocol Buffers).
Tries to avoid excessive memory allocations and array resizing by using an Array of Byte Arrays to represent the data. Supports directly appending Byte Arrays (zero-copy), writing length prefixed data, optimized writing of ASCII and UTF-8 strings without going through a java.io.Writer.