Class RandomAccessReadMemoryMappedFile

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

public class RandomAccessReadMemoryMappedFile extends Object implements RandomAccessRead
An implementation of the RandomAccess interface backed by a memory mapped file channel. The whole file is mapped to memory and the max size is limited to Integer.MAX_VALUE.
  • Field Details

    • mappedByteBuffer

      private ByteBuffer mappedByteBuffer
    • size

      private final long size
    • fileChannel

      private final FileChannel fileChannel
    • unmapper

      private final Consumer<? super ByteBuffer> unmapper
  • Constructor Details

    • RandomAccessReadMemoryMappedFile

      public RandomAccessReadMemoryMappedFile(String filename) throws IOException
      Create a random access memory mapped file instance for the file with the given name.
      Parameters:
      filename - the filename of the file to be read
      Throws:
      IOException - If there is an IO error opening the file.
    • RandomAccessReadMemoryMappedFile

      public RandomAccessReadMemoryMappedFile(File file) throws IOException
      Create a random access memory mapped file instance for the given file.
      Parameters:
      file - the file to be read
      Throws:
      IOException - If there is an IO error opening the file.
    • RandomAccessReadMemoryMappedFile

      public RandomAccessReadMemoryMappedFile(Path path) throws IOException
      Create a random access memory mapped file instance using the given path.
      Parameters:
      path - path of the file to be read.
      Throws:
      IOException - If there is an IO error opening the file.
    • RandomAccessReadMemoryMappedFile

      private RandomAccessReadMemoryMappedFile(RandomAccessReadMemoryMappedFile parent)
  • Method Details

    • close

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

      public void seek(long position) throws IOException
      Seek to a position in the data.
      Specified by:
      seek in interface RandomAccessRead
      Parameters:
      position - The position to seek to.
      Throws:
      IOException - If there is an error while seeking.
    • 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
    • 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 offset, int length) throws IOException
      Read a buffer of data.
      Specified by:
      read in interface RandomAccessRead
      Parameters:
      b - The buffer to write the data to.
      offset - Offset into the buffer to start writing.
      length - 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.
    • checkClosed

      private void checkClosed() throws IOException
      Ensure that the RandomAccessReadMemoryMappedFile is not closed
      Throws:
      IOException - If RandomAccessBuffer already closed
    • 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
    • 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.
    • createView

      public RandomAccessReadView createView(long startPosition, long streamLength)
      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