Class 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 Detail

      • INITIAL_SIZE

        private static int INITIAL_SIZE
      • buf

        private byte[] buf
      • position

        private int position
      • used

        private int used
      • beginPosition

        private int beginPosition
    • Constructor Detail

      • DynamicByteArrayOutputStream

        public DynamicByteArrayOutputStream()
      • DynamicByteArrayOutputStream

        public DynamicByteArrayOutputStream​(int size)
      • DynamicByteArrayOutputStream

        public DynamicByteArrayOutputStream​(byte[] data)
    • Method Detail

      • write

        public void write​(int b)
        Specified by:
        write in class java.io.OutputStream
      • write

        public void write​(byte[] b,
                          int off,
                          int len)
        Overrides:
        write in class java.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 interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Overrides:
        close in class java.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.
        In all cases, if minExpansion is greater than the value about then the buffer will be increased by minExtension.