Class RandomAccessReadUnbufferedDataStream

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

    class RandomAccessReadUnbufferedDataStream
    extends TTFDataStream
    In contrast to RandomAccessReadDataStream, this class doesn't pre-load RandomAccessRead into a byte[], it works with RandomAccessRead directly. Performance: it is much faster if most of the buffer is skipped, and slower if whole buffer is read()
    • Field Detail

      • length

        private final long length
    • Constructor Detail

      • RandomAccessReadUnbufferedDataStream

        RandomAccessReadUnbufferedDataStream​(RandomAccessRead randomAccessRead)
                                      throws java.io.IOException
        Throws:
        java.io.IOException - If there is a problem reading the source length.
    • Method Detail

      • getCurrentPosition

        public long getCurrentPosition()
                                throws java.io.IOException
        Get the current position in the stream.
        Specified by:
        getCurrentPosition in class TTFDataStream
        Returns:
        The current position in the stream.
        Throws:
        java.io.IOException - If an error occurs while reading the stream.
      • close

        public void close()
                   throws java.io.IOException
        Close the underlying resources.
        Throws:
        java.io.IOException - If there is an error closing the resources.
      • read

        public int read()
                 throws java.io.IOException
        Read an unsigned byte.
        Specified by:
        read in class TTFDataStream
        Returns:
        An unsigned byte.
        Throws:
        java.io.IOException - If there is an error reading the data.
      • readLong

        public final long readLong()
                            throws java.io.IOException
        Read an unsigned byte.
        Specified by:
        readLong in class TTFDataStream
        Returns:
        An unsigned byte.
        Throws:
        java.io.IOException - If there is an error reading the data.
      • readInt

        private int readInt()
                     throws java.io.IOException
        Throws:
        java.io.IOException
      • seek

        public void seek​(long pos)
                  throws java.io.IOException
        Seek into the datasource.
        Specified by:
        seek in class TTFDataStream
        Parameters:
        pos - The position to seek to.
        Throws:
        java.io.IOException - If there is an error seeking to that position.
      • read

        public int read​(byte[] b,
                        int off,
                        int len)
                 throws java.io.IOException
        Specified by:
        read in class TTFDataStream
        Parameters:
        b - The buffer to write to.
        off - The offset into the buffer.
        len - The length into the buffer.
        Returns:
        The number of bytes read, or -1 at the end of the stream
        Throws:
        java.io.IOException - If there is an error reading from the stream.
        See Also:
        InputStream.read(byte[], int, int )
      • getOriginalData

        public java.io.InputStream getOriginalData()
                                            throws java.io.IOException
        Lifetime of returned InputStream is bound by this lifetime, it won't close underlying RandomAccessRead. This will get the original data file that was used for this stream.
        Specified by:
        getOriginalData in class TTFDataStream
        Returns:
        The data that was read from.
        Throws:
        java.io.IOException - If there is an issue reading the data.
      • getOriginalDataSize

        public long getOriginalDataSize()
        This will get the original data size that was used for this stream.
        Specified by:
        getOriginalDataSize in class TTFDataStream
        Returns:
        The size of the original data.
      • createSubView

        public RandomAccessRead createSubView​(long length)
        Description copied from class: TTFDataStream
        Creates a view from current position to pos + length. It can be faster than read(length) if you only need a few bytes. SubView.close() should never close TTFDataStream.this, only itself.
        Overrides:
        createSubView in class TTFDataStream
        Returns:
        A view or null (caller can use TTFDataStream.read() instead). Please close() the result