public final class ByteArrayBuilder
extends java.io.OutputStream
ByteArrayOutputStream
in usage, but more geared to Jackson use cases internally.
Specific changes include segment storage (no need to have linear
backing buffer, can avoid reallocations, copying), as well API
not based on OutputStream
. In short, a very much
specialized builder object.
Also implements OutputStream
to allow
efficient aggregation of output content as a byte array, similar
to how ByteArrayOutputStream
works, but somewhat more
efficiently for many use cases.
Modifier and Type | Field and Description |
---|---|
private BufferRecycler |
_bufferRecycler |
private byte[] |
_currBlock |
private int |
_currBlockPtr |
private java.util.LinkedList<byte[]> |
_pastBlocks |
private int |
_pastLen |
(package private) static int |
DEFAULT_BLOCK_ARRAY_SIZE |
private static int |
INITIAL_BLOCK_SIZE |
private static int |
MAX_BLOCK_SIZE |
static byte[] |
NO_BYTES |
Constructor and Description |
---|
ByteArrayBuilder() |
ByteArrayBuilder(BufferRecycler br) |
ByteArrayBuilder(BufferRecycler br,
int firstBlockSize) |
ByteArrayBuilder(int firstBlockSize) |
Modifier and Type | Method and Description |
---|---|
private void |
_allocMore() |
void |
append(int i) |
void |
appendThreeBytes(int b24) |
void |
appendTwoBytes(int b16) |
void |
close() |
byte[] |
completeAndCoalesce(int lastBlockLength)
Method that will complete "manual" output process, coalesce
content (if necessary) and return results as a contiguous buffer.
|
byte[] |
finishCurrentSegment()
Method called when the current segment buffer is full; will
append to current contents, allocate a new segment buffer
and return it
|
void |
flush() |
byte[] |
getCurrentSegment() |
int |
getCurrentSegmentLength() |
void |
release()
Clean up method to call to release all buffers this object may be
using.
|
void |
reset() |
byte[] |
resetAndGetFirstSegment()
Method called when starting "manual" output: will clear out
current state and return the first segment buffer to fill
|
void |
setCurrentSegmentLength(int len) |
byte[] |
toByteArray()
Method called when results are finalized and we can get the
full aggregated result buffer to return to the caller
|
void |
write(byte[] b) |
void |
write(byte[] b,
int off,
int len) |
void |
write(int b) |
public static final byte[] NO_BYTES
private static final int INITIAL_BLOCK_SIZE
private static final int MAX_BLOCK_SIZE
static final int DEFAULT_BLOCK_ARRAY_SIZE
private final BufferRecycler _bufferRecycler
private final java.util.LinkedList<byte[]> _pastBlocks
private int _pastLen
private byte[] _currBlock
private int _currBlockPtr
public ByteArrayBuilder()
public ByteArrayBuilder(BufferRecycler br)
public ByteArrayBuilder(int firstBlockSize)
public ByteArrayBuilder(BufferRecycler br, int firstBlockSize)
public void reset()
public void release()
public void append(int i)
public void appendTwoBytes(int b16)
public void appendThreeBytes(int b24)
public byte[] toByteArray()
public byte[] resetAndGetFirstSegment()
public byte[] finishCurrentSegment()
public byte[] completeAndCoalesce(int lastBlockLength)
lastBlockLength
- Amount of content in the current segment
buffer.public byte[] getCurrentSegment()
public void setCurrentSegmentLength(int len)
public int getCurrentSegmentLength()
public void write(byte[] b)
write
in class java.io.OutputStream
public void write(byte[] b, int off, int len)
write
in class java.io.OutputStream
public void write(int b)
write
in class java.io.OutputStream
public void close()
close
in interface java.io.Closeable
close
in interface java.lang.AutoCloseable
close
in class java.io.OutputStream
public void flush()
flush
in interface java.io.Flushable
flush
in class java.io.OutputStream
private void _allocMore()