Class GroupedRandomAccessSource

java.lang.Object
com.itextpdf.io.source.GroupedRandomAccessSource
All Implemented Interfaces:
IRandomAccessSource
Direct Known Subclasses:
PagedChannelRandomAccessSource

class GroupedRandomAccessSource extends Object implements IRandomAccessSource
A RandomAccessSource that is based on a set of underlying sources, treating the sources as if they were a contiguous block of data.
  • Field Details

    • sources

      private final GroupedRandomAccessSource.SourceEntry[] sources
      The underlying sources (along with some meta data to quickly determine where each source begins and ends)
    • currentSourceEntry

      private GroupedRandomAccessSource.SourceEntry currentSourceEntry
      Cached value to make multiple reads from the same underlying source more efficient
    • size

      private final long size
      Cached size of the underlying channel
  • Constructor Details

  • Method Details

    • getStartingSourceIndex

      protected int getStartingSourceIndex(long offset)
      For a given offset, return the index of the source that contains the specified offset. This is an optimization feature to help optimize the access of the correct source without having to iterate through every single source each time. It is safe to always return 0, in which case the full set of sources will be searched. Subclasses should override this method if they are able to compute the source index more efficiently (for example FileChannelRandomAccessSource takes advantage of fixed size page buffers to compute the index)
      Parameters:
      offset - the offset
      Returns:
      the index of the input source that contains the specified offset, or 0 if unknown
    • getSourceEntryForOffset

      private GroupedRandomAccessSource.SourceEntry getSourceEntryForOffset(long offset) throws IOException
      Returns the SourceEntry that contains the byte at the specified offset sourceReleased is called as a notification callback so subclasses can take care of cleanup when the source is no longer the active source
      Parameters:
      offset - the offset of the byte to look for
      Returns:
      the SourceEntry that contains the byte at the specified offset
      Throws:
      IOException - if there is a problem with IO (usually the result of the sourceReleased() call)
    • sourceReleased

      protected void sourceReleased(IRandomAccessSource source) throws IOException
      Called when a given source is no longer the active source. This gives subclasses the abilty to release resources, if appropriate.
      Parameters:
      source - the source that is no longer the active source
      Throws:
      IOException - if there are any problems
    • sourceInUse

      protected void sourceInUse(IRandomAccessSource source) throws IOException
      Called when a given source is about to become the active source. This gives subclasses the abilty to retrieve resources, if appropriate.
      Parameters:
      source - the source that is about to become the active source
      Throws:
      IOException - if there are any problems
    • get

      public int get(long position) throws IOException
      Gets a byte at the specified position The source that contains the byte at position is retrieved, the correct offset into that source computed, then the value from that offset in the underlying source is returned.
      Specified by:
      get in interface IRandomAccessSource
      Parameters:
      position - byte position
      Returns:
      the byte, or -1 if EOF is reached
      Throws:
      IOException - in case of any reading error.
    • get

      public int get(long position, byte[] bytes, int off, int len) throws IOException
      Read an array of bytes of specified length from the specified position of source to the buffer applying the offset. If the number of bytes requested cannot be read, all the possible bytes will be read to the buffer, and the number of actually read bytes will be returned.
      Specified by:
      get in interface IRandomAccessSource
      Parameters:
      position - the position in the RandomAccessSource to read from
      bytes - output buffer
      off - offset into the output buffer where results will be placed
      len - the number of bytes to read
      Returns:
      the number of bytes actually read, or -1 if the file is at EOF
      Throws:
      IOException - in case of any I/O error.
    • length

      public long length()
      Gets the length of the source
      Specified by:
      length in interface IRandomAccessSource
      Returns:
      the length of this source
    • close

      public void close() throws IOException
      Closes this source. The underlying data structure or source (if any) will also be closed
      Closes all of the underlying sources.
      Specified by:
      close in interface IRandomAccessSource
      Throws:
      IOException - in case of any reading error.