Class RandomAccessReadView

java.lang.Object
org.apache.pdfbox.io.RandomAccessReadView
All Implemented Interfaces:
Closeable, AutoCloseable, RandomAccessRead

public class RandomAccessReadView extends Object implements RandomAccessRead
This class provides a view of a part of a random access read. It clips the section starting at the given start position with the given length into a new random access read.
  • Field Details

    • randomAccessRead

      private RandomAccessRead randomAccessRead
    • startPosition

      private final long startPosition
    • streamLength

      private final long streamLength
    • closeInput

      private final boolean closeInput
    • currentPosition

      private long currentPosition
  • Constructor Details

    • RandomAccessReadView

      public RandomAccessReadView(RandomAccessRead randomAccessRead, long startPosition, long streamLength)
      Constructor.
      Parameters:
      randomAccessRead - the underlying random access read
      startPosition - start position within the underlying random access read
      streamLength - stream length
    • RandomAccessReadView

      public RandomAccessReadView(RandomAccessRead randomAccessRead, long startPosition, long streamLength, boolean closeInput)
      Constructor.
      Parameters:
      randomAccessRead - the underlying random access read
      startPosition - start position within the underlying random access read
      streamLength - stream length
      closeInput - close the underlying random access read when closing the view if set to true
  • Method Details

    • getPosition

      public long getPosition() throws IOException
      Returns offset of next byte to be returned by a read method.
      Specified by:
      getPosition in interface RandomAccessRead
      Returns:
      offset of next byte which will be returned with next RandomAccessRead.read() (if no more bytes are left it returns a value >= length of source)
      Throws:
      IOException - If there was an error while getting the current position
    • seek

      public void seek(long newOffset) throws IOException
      Seek to a position in the data.
      Specified by:
      seek in interface RandomAccessRead
      Parameters:
      newOffset - The position to seek to.
      Throws:
      IOException - If there is an error while seeking.
    • read

      public int read() throws IOException
      Read a single byte of data.
      Specified by:
      read in interface RandomAccessRead
      Returns:
      The byte of data that is being read.
      Throws:
      IOException - If there is an error while reading the data.
    • read

      public int read(byte[] b, int off, int len) throws IOException
      Read a buffer of data.
      Specified by:
      read in interface RandomAccessRead
      Parameters:
      b - The buffer to write the data to.
      off - Offset into the buffer to start writing.
      len - The amount of data to attempt to read.
      Returns:
      The number of bytes that were actually read.
      Throws:
      IOException - If there was an error while reading the data.
    • length

      public long length() throws IOException
      The total number of bytes that are available.
      Specified by:
      length in interface RandomAccessRead
      Returns:
      The number of bytes available.
      Throws:
      IOException - If there is an IO error while determining the length of the data stream.
    • close

      public void close() throws IOException
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Throws:
      IOException
    • isClosed

      public boolean isClosed()
      Returns true if this source has been closed.
      Specified by:
      isClosed in interface RandomAccessRead
      Returns:
      true if the source has been closed
    • rewind

      public void rewind(int bytes) throws IOException
      Seek backwards the given number of bytes.
      Specified by:
      rewind in interface RandomAccessRead
      Parameters:
      bytes - the number of bytes to be seeked backwards
      Throws:
      IOException - If there is an error while seeking
    • isEOF

      public boolean isEOF() throws IOException
      A simple test to see if we are at the end of the data.
      Specified by:
      isEOF in interface RandomAccessRead
      Returns:
      true if we are at the end of the data.
      Throws:
      IOException - If there is an error reading the next byte.
    • restorePosition

      private void restorePosition() throws IOException
      Restore the current position within the underlying random access read.
      Throws:
      IOException
    • checkClosed

      private void checkClosed() throws IOException
      Ensure that the view isn't closed.
      Throws:
      IOException - If RandomAccessReadView already closed
    • createView

      public RandomAccessReadView createView(long startPosition, long streamLength) throws IOException
      Description copied from interface: RandomAccessRead
      Creates a random access read view starting at the given position with the given length.
      Specified by:
      createView in interface RandomAccessRead
      Parameters:
      startPosition - start position within the underlying random access read
      streamLength - stream length
      Returns:
      the random access read view
      Throws:
      IOException - if something went wrong when creating the view for the RandomAccessRead