Class MemByteHolder

  • All Implemented Interfaces:
    ByteHolder

    public class MemByteHolder
    extends java.lang.Object
    implements ByteHolder
    A ByteHolder that stores all its bytes in memory.
    • Constructor Summary

      Constructors 
      Constructor Description
      MemByteHolder​(int bufSize)
      Create a new MemByteHolder.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      int available()
      Return the number of bytes that can be read from this ByteHolder without blocking on an IO.
      void clear()
      Clear the bytes from the ByteHolder and place it in writing mode.
      ByteHolder cloneEmpty()
      Return a byte holder matching existing type and size of current ByteHolder, but don't bother to fill the bytes.
      private java.lang.String dumpBuf​(int bufVEleAt)
      Create a string representation of an internal buffer of bytes.
      protected boolean getNextBuffer_r()
      Get the next buffer for reading bytes.
      protected void getNextBuffer_w()
      Get the next buffer for writing bytes.
      protected void getNextBuffer_w_Sanity()
      Do sanity checking when getting the next write buffer
      protected void initBuffer_w()
      Initialize a buffer for writing
      int numBytesSaved()
      Return the number of bytes that have been saved to this byte holder.
      int read()
      Read a byte from this ByteHolder.
      int read​(byte[] b, int off, int len)
      Read up to 'len' bytes from this ByteHolder and store them in an array at offset 'off'.
      int read​(byte[] b, int off, java.io.OutputStream out, int len)  
      int read​(java.io.OutputStream out, int len)
      Read from the ByteHolder.
      int shiftToFront()
      shift the remaining unread bytes to the beginning of the byte holder
      long skip​(long count)
      Skip over the specified number of bytes in a ByteHolder.
      void startReading()
      Place a ByteHolder in reading mode.
      java.lang.String toString()
      Produce a string describing the state of this ByteHolder.
      void write​(byte[] data, int offset, int len)
      Write len bytes of data starting at 'offset' to this ByteHolder.
      void write​(int b)
      Write a byte to this ByteHolder.
      long write​(java.io.InputStream is, long count)
      Write up to count bytes from an input stream to this ByteHolder.
      boolean writingMode()
      Return true if this is in writing mode.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Field Detail

      • bufSize

        int bufSize
      • writing

        boolean writing
      • bufV

        java.util.Vector<byte[]> bufV
      • curBufVEleAt

        int curBufVEleAt
      • curBuf

        byte[] curBuf
      • curBufPos

        int curBufPos
      • curBufDataBytes

        int curBufDataBytes
      • lastBufVEleAt

        int lastBufVEleAt
      • lastBufDataBytes

        int lastBufDataBytes
    • Constructor Detail

      • MemByteHolder

        public MemByteHolder​(int bufSize)
        Create a new MemByteHolder. Store bytes as a list of buffers of size 'bufSize'.
    • Method Detail

      • write

        public void write​(int b)
                   throws java.io.IOException
        Description copied from interface: ByteHolder
        Write a byte to this ByteHolder.

        The ByteHolder must be in writing mode to call this.

        Specified by:
        write in interface ByteHolder
        Throws:
        java.io.IOException - Thrown on error
        See Also:
        ByteHolder.write(int)
      • write

        public void write​(byte[] data,
                          int offset,
                          int len)
                   throws java.io.IOException
        Description copied from interface: ByteHolder
        Write len bytes of data starting at 'offset' to this ByteHolder.

        The ByteHolder must be in writing mode to call this.

        Specified by:
        write in interface ByteHolder
        Throws:
        java.io.IOException - Thrown on error
        See Also:
        ByteHolder.write(int)
      • write

        public long write​(java.io.InputStream is,
                          long count)
                   throws java.io.IOException
        Description copied from interface: ByteHolder
        Write up to count bytes from an input stream to this ByteHolder. This may write fewer bytes if it encounters an end of file on the input stream.
        Specified by:
        write in interface ByteHolder
        Returns:
        the number of bytes written.
        Throws:
        java.io.IOException - Thrown on error
        See Also:
        ByteHolder.write(int)
      • clear

        public void clear()
                   throws java.io.IOException
        Description copied from interface: ByteHolder
        Clear the bytes from the ByteHolder and place it in writing mode. This may not free the memory the ByteHolder uses to store data.
        Specified by:
        clear in interface ByteHolder
        Throws:
        java.io.IOException - Thrown on error
        See Also:
        ByteHolder.clear()
      • startReading

        public void startReading()
                          throws java.io.IOException
        Description copied from interface: ByteHolder
        Place a ByteHolder in reading mode. After this call, reads scan bytes sequentially in the order they were written to the ByteHolder starting from the first byte. When the ByteHolder is already in readmode this simply arranges for reads to start at the beginning of the sequence of saved bytes.
        Specified by:
        startReading in interface ByteHolder
        Throws:
        java.io.IOException
        See Also:
        ByteHolder.startReading()
      • read

        public int read()
                 throws java.io.IOException
        Description copied from interface: ByteHolder
        Read a byte from this ByteHolder.

        The ByteHolder must be in reading mode to call this.

        Specified by:
        read in interface ByteHolder
        Returns:
        The byte or -1 if there are no bytes available.
        Throws:
        java.io.IOException - Thrown on error
        See Also:
        ByteHolder.read()
      • read

        public int read​(byte[] b,
                        int off,
                        int len)
                 throws java.io.IOException
        Description copied from interface: ByteHolder
        Read up to 'len' bytes from this ByteHolder and store them in an array at offset 'off'.

        The ByteHolder must be in reading mode to call this.

        Specified by:
        read in interface ByteHolder
        Returns:
        the number of bytes read or -1 if the this ByteHolder has no more bytes.
        Throws:
        java.io.IOException - Thrown on error
        See Also:
        ByteHolder.read()
      • read

        public int read​(java.io.OutputStream out,
                        int len)
                 throws java.io.IOException
        Description copied from interface: ByteHolder
        Read from the ByteHolder.

        Read up to 'len' bytes from this ByteHolder and write them to the OutputStream

        The ByteHolder must be in reading mode to call this.

        Specified by:
        read in interface ByteHolder
        Returns:
        the number of bytes read or -1 if the this ByteHolder has no more bytes.
        Throws:
        java.io.IOException - Thrown on error
        See Also:
        ByteHolder.read()
      • read

        public int read​(byte[] b,
                        int off,
                        java.io.OutputStream out,
                        int len)
                 throws java.io.IOException
        Throws:
        java.io.IOException - Thrown on error
        See Also:
        ByteHolder.read()
      • shiftToFront

        public int shiftToFront()
                         throws java.io.IOException
        Description copied from interface: ByteHolder
        shift the remaining unread bytes to the beginning of the byte holder
        Specified by:
        shiftToFront in interface ByteHolder
        Throws:
        java.io.IOException - Thrown on error
        See Also:
        ByteHolder.shiftToFront()
      • available

        public int available()
        Description copied from interface: ByteHolder
        Return the number of bytes that can be read from this ByteHolder without blocking on an IO.
        Specified by:
        available in interface ByteHolder
        See Also:
        ByteHolder.available()
      • numBytesSaved

        public int numBytesSaved()
        Return the number of bytes that have been saved to this byte holder. This result is different from available() as it is unaffected by the current read position on the ByteHolder.
        Specified by:
        numBytesSaved in interface ByteHolder
        See Also:
        ByteHolder.numBytesSaved()
      • skip

        public long skip​(long count)
                  throws java.io.IOException
        Description copied from interface: ByteHolder
        Skip over the specified number of bytes in a ByteHolder.
        Specified by:
        skip in interface ByteHolder
        Throws:
        java.io.IOException - Thrown on error
        See Also:
        ByteHolder.skip(long)
      • cloneEmpty

        public ByteHolder cloneEmpty()
        Description copied from interface: ByteHolder
        Return a byte holder matching existing type and size of current ByteHolder, but don't bother to fill the bytes. Normal usage is expected to reset the holding stream to the beginning, so the copy of current state would be wasted.
        Specified by:
        cloneEmpty in interface ByteHolder
        Returns:
        An empty ByteHolder.
        See Also:
        ByteHolder.cloneEmpty()
      • getNextBuffer_w

        protected void getNextBuffer_w()
                                throws java.io.IOException
        Get the next buffer for writing bytes.
        Throws:
        java.io.IOException - Thrown on error
      • getNextBuffer_w_Sanity

        protected void getNextBuffer_w_Sanity()
        Do sanity checking when getting the next write buffer
      • initBuffer_w

        protected void initBuffer_w()
        Initialize a buffer for writing
      • getNextBuffer_r

        protected boolean getNextBuffer_r()
                                   throws java.io.IOException
        Get the next buffer for reading bytes.
        Returns:
        true if the user has read all the bytes in this ByteHolder.
        Throws:
        java.io.IOException - Thrown on error
      • dumpBuf

        private java.lang.String dumpBuf​(int bufVEleAt)
        Create a string representation of an internal buffer of bytes. This is useful during debugging.
      • toString

        public java.lang.String toString()
        Produce a string describing the state of this ByteHolder. This is mainly for debugging.
        Overrides:
        toString in class java.lang.Object