Package org.infinispan.commons.io
Class LazyByteArrayOutputStream
- java.lang.Object
-
- java.io.OutputStream
-
- org.infinispan.commons.io.LazyByteArrayOutputStream
-
- All Implemented Interfaces:
Closeable
,Flushable
,AutoCloseable
@NotThreadSafe public final class LazyByteArrayOutputStream extends OutputStream
ByteArrayOutputStream alternative exposing the internal buffer. Using this, callers don't need to call toByteArray() which copies the internal buffer.This class doubles the size until the internal buffer reaches a configurable max size (default is 4MB), after which it begins growing the buffer in 25% increments. This is intended to help prevent an OutOfMemoryError during a resize of a large buffer.
A version of this class was originally created by Bela Ban as part of the JGroups library.
This class is not threadsafe as it will not support concurrent readers and writers.
- Since:
- 13.0
- Author:
- Brian Stansberry, Dan Berindei
-
-
Field Summary
Fields Modifier and Type Field Description static int
DEFAULT_DOUBLING_SIZE
Default buffer size after which if more buffer capacity is needed the buffer will grow by 25% rather than 100%static int
DEFAULT_SIZE
-
Constructor Summary
Constructors Constructor Description LazyByteArrayOutputStream()
LazyByteArrayOutputStream(int size)
LazyByteArrayOutputStream(int size, int maxDoublingSize)
Creates a new byte array output stream, with a buffer capacity of the specified size, in bytes.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description int
getMaxDoublingSize()
Gets the highest internal buffer size after which if more capacity is needed the buffer will grow in 25% increments rather than 100%.int
getNewBufferSize(int curSize, int minNewSize)
Gets the number of bytes to which the internal buffer should be resized.byte[]
getRawBuffer()
Gets the internal buffer array.int
size()
Overriden only to avoid unneeded synchronizationvoid
write(byte[] b, int off, int len)
void
write(int b)
-
-
-
Field Detail
-
DEFAULT_SIZE
public static final int DEFAULT_SIZE
- See Also:
- Constant Field Values
-
DEFAULT_DOUBLING_SIZE
public static final int DEFAULT_DOUBLING_SIZE
Default buffer size after which if more buffer capacity is needed the buffer will grow by 25% rather than 100%- See Also:
- Constant Field Values
-
-
Constructor Detail
-
LazyByteArrayOutputStream
public LazyByteArrayOutputStream()
-
LazyByteArrayOutputStream
public LazyByteArrayOutputStream(int size)
-
LazyByteArrayOutputStream
public LazyByteArrayOutputStream(int size, int maxDoublingSize)
Creates a new byte array output stream, with a buffer capacity of the specified size, in bytes.- Parameters:
size
- the initial size.maxDoublingSize
- the buffer size, after which if more capacity is needed the buffer will grow by 25% rather than 100%- Throws:
IllegalArgumentException
- if size is negative.
-
-
Method Detail
-
getRawBuffer
public byte[] getRawBuffer()
Gets the internal buffer array. Note that the length of this array will almost certainly be longer than the data written to it; callsize()
to get the number of bytes of actual data.
-
write
public void write(byte[] b, int off, int len)
-
write
public void write(int b)
-
getMaxDoublingSize
public final int getMaxDoublingSize()
Gets the highest internal buffer size after which if more capacity is needed the buffer will grow in 25% increments rather than 100%.
-
getNewBufferSize
public int getNewBufferSize(int curSize, int minNewSize)
Gets the number of bytes to which the internal buffer should be resized.- Parameters:
curSize
- the current number of bytesminNewSize
- the minimum number of bytes required- Returns:
- the size to which the internal buffer should be resized
-
size
public int size()
Overriden only to avoid unneeded synchronization
-
-