Class DynamicByteArrayOutputStream

java.lang.Object
java.io.OutputStream
org.apache.derby.iapi.services.io.DynamicByteArrayOutputStream
All Implemented Interfaces:
Closeable, Flushable, AutoCloseable

public class DynamicByteArrayOutputStream extends 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 Details

    • INITIAL_SIZE

      private static int INITIAL_SIZE
    • buf

      private byte[] buf
    • position

      private int position
    • used

      private int used
    • beginPosition

      private int beginPosition
  • Constructor Details

    • DynamicByteArrayOutputStream

      public DynamicByteArrayOutputStream()
    • DynamicByteArrayOutputStream

      public DynamicByteArrayOutputStream(int size)
    • DynamicByteArrayOutputStream

      public DynamicByteArrayOutputStream(byte[] data)
    • DynamicByteArrayOutputStream

      public DynamicByteArrayOutputStream(DynamicByteArrayOutputStream toBeCloned)
  • Method Details

    • write

      public void write(int b)
      Specified by:
      write in class OutputStream
    • write

      public void write(byte[] b, int off, int len)
      Overrides:
      write in class OutputStream
    • writeCompleteStream

      void writeCompleteStream(InputStream dataIn, int len) throws IOException
      Throws:
      IOException
    • close

      public void close()
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Overrides:
      close in class 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.
      In all cases, if minExpansion is greater than the value about then the buffer will be increased by minExtension.