Class BlobInputStream

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable

    public class BlobInputStream
    extends java.io.InputStream
    This is an implementation of an InputStream from a large object.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void close()
      Closes this input stream and releases any system resources associated with the stream.
      private LargeObject getLo()  
      private int getNextBufferSize​(int len)
      Computes the next buffer size to use for reading data from the large object.
      void mark​(int readlimit)
      Marks the current position in this input stream.
      boolean markSupported()
      Tests if this input stream supports the mark and reset methods.
      int read()
      The minimum required to implement input stream.
      int read​(byte[] dest, int off, int len)  
      void reset()
      Repositions this stream to the position at the time the mark method was last called on this input stream.
      • Methods inherited from class java.io.InputStream

        available, nullInputStream, read, readAllBytes, readNBytes, readNBytes, skip, transferTo
      • Methods inherited from class java.lang.Object

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

      • absolutePosition

        private long absolutePosition
        The absolute position.
      • buffer

        private byte[] buffer
        Buffer used to improve performance.
      • bufferPosition

        private int bufferPosition
        Position within buffer.
      • lastBufferSize

        private int lastBufferSize
        The amount of bytes to read on the next read. Currently, we nullify buffer, so we can't use buffer.length.
      • maxBufferSize

        private final int maxBufferSize
        The buffer size.
      • markPosition

        private long markPosition
        The mark position.
      • limit

        private final long limit
        The limit.
    • Constructor Detail

      • BlobInputStream

        public BlobInputStream​(LargeObject lo)
        Parameters:
        lo - LargeObject to read from
      • BlobInputStream

        public BlobInputStream​(LargeObject lo,
                               int bsize)
        Parameters:
        lo - LargeObject to read from
        bsize - buffer size
      • BlobInputStream

        public BlobInputStream​(LargeObject lo,
                               int bsize,
                               long limit)
        Parameters:
        lo - LargeObject to read from
        bsize - buffer size
        limit - max number of bytes to read
    • Method Detail

      • read

        public int read()
                 throws java.io.IOException
        The minimum required to implement input stream.
        Specified by:
        read in class java.io.InputStream
        Throws:
        java.io.IOException
      • getNextBufferSize

        private int getNextBufferSize​(int len)
        Computes the next buffer size to use for reading data from the large object. The idea is to avoid allocating too much memory, especially if the user will use just a few bytes of the data.
        Parameters:
        len - estimated read request
        Returns:
        next buffer size or maxBufferSize if the buffer should not be increased
      • read

        public int read​(byte[] dest,
                        int off,
                        int len)
                 throws java.io.IOException
        Overrides:
        read in class java.io.InputStream
        Throws:
        java.io.IOException
      • close

        public void close()
                   throws java.io.IOException

        Closes this input stream and releases any system resources associated with the stream.

        The close method of InputStream does nothing.

        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Overrides:
        close in class java.io.InputStream
        Throws:
        java.io.IOException - if an I/O error occurs.
      • mark

        public void mark​(int readlimit)

        Marks the current position in this input stream. A subsequent call to the reset method repositions this stream at the last marked position so that subsequent reads re-read the same bytes.

        The readlimit arguments tells this input stream to allow that many bytes to be read before the mark position gets invalidated.

        The general contract of mark is that, if the method markSupported returns true, the stream somehow remembers all the bytes read after the call to mark and stands ready to supply those same bytes again if and whenever the method reset is called. However, the stream is not required to remember any data at all if more than readlimit bytes are read from the stream before reset is called.

        Marking a closed stream should not have any effect on the stream.

        Overrides:
        mark in class java.io.InputStream
        Parameters:
        readlimit - the maximum limit of bytes that can be read before the mark position becomes invalid.
        See Also:
        InputStream.reset()
      • reset

        public void reset()
                   throws java.io.IOException
        Repositions this stream to the position at the time the mark method was last called on this input stream. NB: If mark is not called we move to the beginning.
        Overrides:
        reset in class java.io.InputStream
        Throws:
        java.io.IOException
        See Also:
        InputStream.mark(int), IOException
      • markSupported

        public boolean markSupported()
        Tests if this input stream supports the mark and reset methods. The markSupported method of InputStream returns false.
        Overrides:
        markSupported in class java.io.InputStream
        Returns:
        true if this true type supports the mark and reset method; false otherwise.
        See Also:
        InputStream.mark(int), InputStream.reset()
      • getLo

        private LargeObject getLo()
                           throws java.io.IOException
        Throws:
        java.io.IOException