Package com.fasterxml.jackson.core.util
Class ByteArrayBuilder
- java.lang.Object
-
- java.io.OutputStream
-
- com.fasterxml.jackson.core.util.ByteArrayBuilder
-
- All Implemented Interfaces:
java.io.Closeable
,java.io.Flushable
,java.lang.AutoCloseable
public final class ByteArrayBuilder extends java.io.OutputStream
Helper class that is similar toByteArrayOutputStream
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 onOutputStream
. In short, a very much specialized builder object.Also implements
OutputStream
to allow efficient aggregation of output content as a byte array, similar to howByteArrayOutputStream
works, but somewhat more efficiently for many use cases.NOTE: maximum size limited to Java Array maximum, 2 gigabytes: this because usage pattern is to collect content for a `byte[]` and so although theoretically this builder can aggregate more content it will not be usable as things are. Behavior may be improved if we solve the access problem.
-
-
Field Summary
Fields Modifier and Type Field Description static byte[]
NO_BYTES
-
Constructor Summary
Constructors Constructor Description ByteArrayBuilder()
ByteArrayBuilder(int firstBlockSize)
ByteArrayBuilder(BufferRecycler br)
ByteArrayBuilder(BufferRecycler br, int firstBlockSize)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
append(int i)
void
appendFourBytes(int b32)
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 itvoid
flush()
static ByteArrayBuilder
fromInitial(byte[] initialBlock, int length)
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 fillvoid
setCurrentSegmentLength(int len)
int
size()
byte[]
toByteArray()
Method called when results are finalized and we can get the full aggregated result buffer to return to the callervoid
write(byte[] b)
void
write(byte[] b, int off, int len)
void
write(int b)
-
-
-
Constructor Detail
-
ByteArrayBuilder
public ByteArrayBuilder()
-
ByteArrayBuilder
public ByteArrayBuilder(BufferRecycler br)
-
ByteArrayBuilder
public ByteArrayBuilder(int firstBlockSize)
-
ByteArrayBuilder
public ByteArrayBuilder(BufferRecycler br, int firstBlockSize)
-
-
Method Detail
-
fromInitial
public static ByteArrayBuilder fromInitial(byte[] initialBlock, int length)
-
reset
public void reset()
-
size
public int size()
- Returns:
- Number of bytes aggregated so far
- Since:
- 2.9
-
release
public void release()
Clean up method to call to release all buffers this object may be using. After calling the method, no other accessors can be used (and attempt to do so may result in an exception)
-
append
public void append(int i)
-
appendTwoBytes
public void appendTwoBytes(int b16)
-
appendThreeBytes
public void appendThreeBytes(int b24)
-
appendFourBytes
public void appendFourBytes(int b32)
-
toByteArray
public byte[] toByteArray()
Method called when results are finalized and we can get the full aggregated result buffer to return to the caller- Returns:
- Aggregated contents as a
byte[]
-
resetAndGetFirstSegment
public byte[] resetAndGetFirstSegment()
Method called when starting "manual" output: will clear out current state and return the first segment buffer to fill- Returns:
- Segment to use for writing
-
finishCurrentSegment
public byte[] finishCurrentSegment()
Method called when the current segment buffer is full; will append to current contents, allocate a new segment buffer and return it- Returns:
- Segment to use for writing
-
completeAndCoalesce
public byte[] completeAndCoalesce(int lastBlockLength)
Method that will complete "manual" output process, coalesce content (if necessary) and return results as a contiguous buffer.- Parameters:
lastBlockLength
- Amount of content in the current segment buffer.- Returns:
- Coalesced contents
-
getCurrentSegment
public byte[] getCurrentSegment()
-
setCurrentSegmentLength
public void setCurrentSegmentLength(int len)
-
getCurrentSegmentLength
public int getCurrentSegmentLength()
-
write
public void write(byte[] b)
- Overrides:
write
in classjava.io.OutputStream
-
write
public void write(byte[] b, int off, int len)
- Overrides:
write
in classjava.io.OutputStream
-
write
public void write(int b)
- Specified by:
write
in classjava.io.OutputStream
-
close
public void close()
- Specified by:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in interfacejava.io.Closeable
- Overrides:
close
in classjava.io.OutputStream
-
flush
public void flush()
- Specified by:
flush
in interfacejava.io.Flushable
- Overrides:
flush
in classjava.io.OutputStream
-
-