Class RandomAccessReadBufferedFile

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

public class RandomAccessReadBufferedFile extends Object implements RandomAccessRead
Provides random access to portions of a file combined with buffered reading of content. Start of next bytes to read can be set via seek method. File is accessed via FileChannel and is read in ByteBuffer chunks which are cached.
Author:
Timo Boehme
  • Constructor Details

    • RandomAccessReadBufferedFile

      public RandomAccessReadBufferedFile(String filename) throws IOException
      Create a random access buffered file instance for the file with the given name.
      Parameters:
      filename - the filename of the file to be read.
      Throws:
      IOException - if something went wrong while accessing the given file.
    • RandomAccessReadBufferedFile

      public RandomAccessReadBufferedFile(File file) throws IOException
      Create a random access buffered file instance for the given file.
      Parameters:
      file - the file to be read.
      Throws:
      IOException - if something went wrong while accessing the given file.
    • RandomAccessReadBufferedFile

      public RandomAccessReadBufferedFile(Path path) throws IOException
      Create a random access buffered file instance using the given path.
      Parameters:
      path - path of the file to be read.
      Throws:
      IOException - if something went wrong while accessing the given file.
  • Method Details

    • getPosition

      public long getPosition() throws IOException
      Description copied from interface: RandomAccessRead
      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 position) throws IOException
      Seeks to new position. If new position is outside of current page the new page is either taken from cache or read from file and added to cache.
      Specified by:
      seek in interface RandomAccessRead
      Parameters:
      position - the position to seek to.
      Throws:
      IOException - if something went wrong.
    • read

      public int read() throws IOException
      Description copied from interface: RandomAccessRead
      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
      Description copied from interface: RandomAccessRead
      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
      Description copied from interface: RandomAccessRead
      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()
      Description copied from interface: RandomAccessRead
      Returns true if this source has been closed.
      Specified by:
      isClosed in interface RandomAccessRead
      Returns:
      true if the source has been closed
    • isEOF

      public boolean isEOF() throws IOException
      Description copied from interface: RandomAccessRead
      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.
    • 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