Class CachingInputStream

java.lang.Object
java.io.InputStream
org.biojava.utils.io.CachingInputStream
All Implemented Interfaces:
Closeable, AutoCloseable, Seekable

public class CachingInputStream extends InputStream implements Seekable
A wrapper around InputStream that provides in-memory caching of the input data. This allows it to provide a seek(long) method, which lets the user use an InputStream like a RandomAccessFile (with appropriate caveats about memory footprint, security, and performance).

This class has not been tested with very long input streams. It might choke.

Author:
Rhett Sutphin (UI CBCB)
  • Field Details

    • cache

      protected byte[] cache
      The byte cache itself.
    • ptr

      protected int ptr
      The 0-based index into cache of the _next_ byte to return. If ptr == validLen, data must be read from the stream into the cache.
    • validLen

      protected int validLen
      A count of the number of bytes in cache that contain data read from the stream.
    • in

      protected InputStream in
      The underlying input stream whose data we're caching
  • Constructor Details

  • Method Details

    • seek

      public void seek(long pos) throws IOException
      Description copied from interface: Seekable
      Moves the pointer in the inputstream such that the byte starting at pos are returned by the next read.
      Specified by:
      seek in interface Seekable
      Parameters:
      pos - the position to which to seek
      Throws:
      IOException - when there's an I/O problem
    • read

      public int read() throws IOException
      Specified by:
      read in class InputStream
      Throws:
      IOException
    • read

      public int read(byte[] b, int start, int len) throws IOException
      Overrides:
      read in class InputStream
      Throws:
      IOException
    • skip

      public long skip(long num) throws IOException
      Overrides:
      skip in class InputStream
      Throws:
      IOException
    • expandCache

      protected void expandCache(int additionalBytes)
      Expands the cache to hold some number of additionalBytes. Expansion is done multiplicatively for efficiency. Immediately after calling this method, you must fill the additional bytes from the stream because this method also updates validLen.