com.mckoi.util
Class PagedInputStream
java.lang.Object
java.io.InputStream
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 |
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.
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