Class DynamicByteArrayOutputStream
- java.lang.Object
-
- java.io.OutputStream
-
- org.apache.derby.iapi.services.io.DynamicByteArrayOutputStream
-
- All Implemented Interfaces:
java.io.Closeable
,java.io.Flushable
,java.lang.AutoCloseable
public class DynamicByteArrayOutputStream extends java.io.OutputStream
A DynamicByteArrayOutputStream allows writing to a dynamically resizable array of bytes. In addition to dynamic resizing, this extension allows the user of this class to have more control over the position of the stream and can get a direct reference of the array.
-
-
Field Summary
Fields Modifier and Type Field Description private int
beginPosition
private byte[]
buf
private static int
INITIAL_SIZE
private int
position
private int
used
-
Constructor Summary
Constructors Constructor Description DynamicByteArrayOutputStream()
DynamicByteArrayOutputStream(byte[] data)
DynamicByteArrayOutputStream(int size)
DynamicByteArrayOutputStream(DynamicByteArrayOutputStream toBeCloned)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
close()
void
discardLeft(int amountToShrinkBy)
Shrink the buffer left by the amount given.private void
expandBuffer(int minExtension)
Expand the buffer by at least the number of bytes requested in minExtension.int
getBeginPosition()
Get the current position in the streambyte[]
getByteArray()
Get a reference to the byte array stored in the byte array output stream.int
getPosition()
Get the current position in the streamint
getUsed()
Get the number of bytes that was used.void
reset()
Reset the stream for reusevoid
setBeginPosition(int newBeginPosition)
Set the begin position of the stream pointer.void
setPosition(int newPosition)
Set the position of the stream pointer.void
write(byte[] b, int off, int len)
void
write(int b)
(package private) void
writeCompleteStream(java.io.InputStream dataIn, int len)
-
-
-
Constructor Detail
-
DynamicByteArrayOutputStream
public DynamicByteArrayOutputStream()
-
DynamicByteArrayOutputStream
public DynamicByteArrayOutputStream(int size)
-
DynamicByteArrayOutputStream
public DynamicByteArrayOutputStream(byte[] data)
-
DynamicByteArrayOutputStream
public DynamicByteArrayOutputStream(DynamicByteArrayOutputStream toBeCloned)
-
-
Method Detail
-
write
public void write(int b)
- Specified by:
write
in classjava.io.OutputStream
-
write
public void write(byte[] b, int off, int len)
- Overrides:
write
in classjava.io.OutputStream
-
writeCompleteStream
void writeCompleteStream(java.io.InputStream dataIn, int len) throws java.io.IOException
- Throws:
java.io.IOException
-
close
public void close()
- Specified by:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in interfacejava.io.Closeable
- Overrides:
close
in classjava.io.OutputStream
-
reset
public void reset()
Reset the stream for reuse
-
getByteArray
public byte[] getByteArray()
Get a reference to the byte array stored in the byte array output stream. Note that the byte array may be longer that getPosition(). Bytes beyond and including the current poistion are invalid.
-
getUsed
public int getUsed()
Get the number of bytes that was used.
-
getPosition
public int getPosition()
Get the current position in the stream
-
getBeginPosition
public int getBeginPosition()
Get the current position in the stream
-
setPosition
public void setPosition(int newPosition)
Set the position of the stream pointer. It is up to the caller to make sure the stream has no gap of garbage in it or useful information is not left out at the end because the stream does not remember anything about the previous position.
-
setBeginPosition
public void setBeginPosition(int newBeginPosition)
Set the begin position of the stream pointer. If the newBeginPosition is larger than the stream itself, then, the begin position is not set.
-
discardLeft
public void discardLeft(int amountToShrinkBy)
Shrink the buffer left by the amount given. Ie. bytes from 0 to amountToShrinkBy are thrown away
-
expandBuffer
private void expandBuffer(int minExtension)
Expand the buffer by at least the number of bytes requested in minExtension. To optimize performance and reduce memory copies and allocation, we have a staged buffer expansion.- buf.length < 128k - increase by 4k
- buf.length < 1Mb - increase by 128k
- otherwise increase by 1Mb.
-
-