Class UnsafeByteArrayInputStream

  • All Implemented Interfaces:
    Closeable, AutoCloseable

    public class UnsafeByteArrayInputStream
    extends InputStream
    This class, much like ByteArrayInputStream uses a given buffer as a source of an InputStream. Unlike ByteArrayInputStream, this class does not "waste" memory by creating a local copy of the given buffer, but rather uses the given buffer as is. Hence the name Unsafe. While using this class one should remember that the byte[] buffer memory is shared and might be changed from outside. For reuse-ability, a call for reInit(byte[]) can be called, and initialize the stream with a new buffer.
    WARNING: This API is experimental and might change in incompatible ways in the next release.
    • Constructor Detail

      • UnsafeByteArrayInputStream

        public UnsafeByteArrayInputStream()
        Creates a new instance by not using any byte[] up front. If you use this constructor, you MUST call either of the reInit methods before you consume any byte from this instance.
        This constructor is for convenience purposes only, so that if one does not have the byte[] at the moment of creation, one is not forced to pass a new byte[0] or something. Obviously in that case, one will call either reInit methods before using the class.
      • UnsafeByteArrayInputStream

        public UnsafeByteArrayInputStream​(byte[] buffer)
        Creates an UnsafeByteArrayInputStream which uses a given byte array as the source of the stream. Default range is [0 , buffer.length)
        Parameters:
        buffer - byte array used as the source of this stream
      • UnsafeByteArrayInputStream

        public UnsafeByteArrayInputStream​(byte[] buffer,
                                          int startPos,
                                          int endPos)
        Creates an UnsafeByteArrayInputStream which uses a given byte array as the source of the stream, at the specific range: [startPos, endPos)
        Parameters:
        buffer - byte array used as the source of this stream
        startPos - first index (inclusive) to the data lying in the given buffer
        endPos - an index (exclusive) where the data ends. data @ buffer[endPos] will never be read
    • Method Detail

      • mark

        public void mark​(int readlimit)
        Overrides:
        mark in class InputStream
      • reInit

        public void reInit​(byte[] buffer)
        Initialize the stream with a given buffer, using the default limits of [0, buffer.length)
        Parameters:
        buffer - byte array used as the source of this stream
      • reInit

        public void reInit​(byte[] buffer,
                           int startPos,
                           int endPos)
        Initialize the stream with a given byte array as the source of the stream, at the specific range: [startPos, endPos)
        Parameters:
        buffer - byte array used as the source of this stream
        startPos - first index (inclusive) to the data lying in the given buffer
        endPos - an index (exclusive) where the data ends. data @ buffer[endPos] will never be read
      • read

        public int read()
                 throws IOException
        Read a byte. Data returned as an integer [0,255] If end of stream reached, returns -1
        Specified by:
        read in class InputStream
        Throws:
        IOException
      • reset

        public void reset()
                   throws IOException
        Resets the stream back to its original state. Basically - moving the index back to start position.
        Overrides:
        reset in class InputStream
        Throws:
        IOException