Class RandomAccessReadBuffer

java.lang.Object
org.apache.pdfbox.io.RandomAccessReadBuffer
All Implemented Interfaces:
Closeable, AutoCloseable, RandomAccessRead
Direct Known Subclasses:
RandomAccessReadWriteBuffer

public class RandomAccessReadBuffer extends Object implements RandomAccessRead
An implementation of the RandomAccessRead interface to store data in memory. The data will be stored in chunks organized in an ArrayList.
  • Field Details

    • DEFAULT_CHUNK_SIZE_4KB

      public static final int DEFAULT_CHUNK_SIZE_4KB
      See Also:
    • chunkSize

      protected int chunkSize
    • bufferList

      private final List<ByteBuffer> bufferList
    • currentBuffer

      protected ByteBuffer currentBuffer
    • pointer

      protected long pointer
    • currentBufferPointer

      protected int currentBufferPointer
    • size

      protected long size
    • bufferListIndex

      private int bufferListIndex
    • bufferListMaxIndex

      private int bufferListMaxIndex
    • rarbCopies

      private final ConcurrentMap<Long,RandomAccessReadBuffer> rarbCopies
  • Constructor Details

    • RandomAccessReadBuffer

      protected RandomAccessReadBuffer()
      Default constructor.
    • RandomAccessReadBuffer

      protected RandomAccessReadBuffer(int definedChunkSize)
      Default constructor.
    • RandomAccessReadBuffer

      public RandomAccessReadBuffer(byte[] input)
      Create a random access buffer using the given byte array.
      Parameters:
      input - the byte array to be read
    • RandomAccessReadBuffer

      public RandomAccessReadBuffer(ByteBuffer input)
      Create a random access buffer using the given ByteBuffer.
      Parameters:
      input - the ByteBuffer to be read
    • RandomAccessReadBuffer

      public RandomAccessReadBuffer(InputStream input) throws IOException
      Create a random access read buffer of the given input stream by copying the data to the memory.
      Parameters:
      input - the input stream to be read
      Throws:
      IOException - if something went wrong while copying the data
    • RandomAccessReadBuffer

      private RandomAccessReadBuffer(RandomAccessReadBuffer 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.
    • readRemainingBytes

      private int readRemainingBytes(byte[] b, int offset, int length)
    • 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.
    • expandBuffer

      protected void expandBuffer() throws IOException
      create a new buffer chunk and adjust all pointers and indices.
      Throws:
      IOException
    • nextBuffer

      private void nextBuffer() throws IOException
      switch to the next buffer chunk and reset the buffer pointer.
      Throws:
      IOException
    • checkClosed

      protected void checkClosed() throws IOException
      Ensure that the RandomAccessBuffer 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) 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
    • createBufferFromStream

      public static RandomAccessReadBuffer createBufferFromStream(InputStream inputStream) throws IOException
      Create e new RandomAccessReadBuffer using the given InputStream. The data is copied to the memory and the InputStream is closed.
      Parameters:
      inputStream - the InputStream holding the data to be copied
      Returns:
      the RandomAccessReadBuffer holding the data of the InputStream
      Throws:
      IOException - if something went wrong while copying the data
    • resetBuffers

      protected void resetBuffers()
      Reset to position 0 and remove all buffers but the first one.