com.mckoi.util
Class PagedInputStream

java.lang.Object
  extended by java.io.InputStream
      extended by com.mckoi.util.PagedInputStream
All Implemented Interfaces:
java.io.Closeable

public abstract class PagedInputStream
extends java.io.InputStream

An implementation of InputStream that reads data from an underlying representation in fixed sized pages. This object maintains a single buffer that is the size of a page. This implementation supports 'skip' and buffered access to the data.

The only method that needs to be implemented is the 'readPageContent' method.

Author:
Tobias Downer

Constructor Summary
PagedInputStream(int page_size, long total_size)
          Constructs the input stream.
 
Method Summary
 int available()
           
 void close()
           
 void mark(int limit)
           
 boolean markSupported()
           
 int read()
           
 int read(byte[] read_buf, int off, int len)
           
protected abstract  void readPageContent(byte[] buf, long pos, int length)
          Reads the page at the given offset in the underlying data into the given byte[] array.
 void reset()
           
 long skip(long n)
           
 
Methods inherited from class java.io.InputStream
read
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

PagedInputStream

public PagedInputStream(int page_size,
                        long total_size)
Constructs the input stream.

Parameters:
page_size - the size of the pages when accessing the underlying stream.
total_size - the total size of the underlying data set.
Method Detail

readPageContent

protected abstract void readPageContent(byte[] buf,
                                        long pos,
                                        int length)
                                 throws java.io.IOException
Reads the page at the given offset in the underlying data into the given byte[] array. The 'pos' variable given is guarenteed to be a multiple of buffer_size. For example, the first access will be to pos = 0, the second access to pos = BUFFER_SIZE, the third access to pos = BUFFER_SIZE * 2, etc. 'length' will always be either BUFFER_SIZE or a value smaller than BUFFER_SIZE if the page containing the end of the stream is read.

Throws:
java.io.IOException

read

public int read()
         throws java.io.IOException
Specified by:
read in class java.io.InputStream
Throws:
java.io.IOException

read

public int read(byte[] read_buf,
                int off,
                int len)
         throws java.io.IOException
Overrides:
read in class java.io.InputStream
Throws:
java.io.IOException

skip

public long skip(long n)
          throws java.io.IOException
Overrides:
skip in class java.io.InputStream
Throws:
java.io.IOException

available

public int available()
              throws java.io.IOException
Overrides:
available in class java.io.InputStream
Throws:
java.io.IOException

close

public void close()
           throws java.io.IOException
Specified by:
close in interface java.io.Closeable
Overrides:
close in class java.io.InputStream
Throws:
java.io.IOException

mark

public void mark(int limit)
Overrides:
mark in class java.io.InputStream

reset

public void reset()
Overrides:
reset in class java.io.InputStream

markSupported

public boolean markSupported()
Overrides:
markSupported in class java.io.InputStream