org.apache.pdfbox.io
Class RandomAccessBufferedFileInputStream

java.lang.Object
  extended by java.io.InputStream
      extended by org.apache.pdfbox.io.RandomAccessBufferedFileInputStream
All Implemented Interfaces:
java.io.Closeable, RandomAccessRead, SequentialRead

public class RandomAccessBufferedFileInputStream
extends java.io.InputStream
implements RandomAccessRead

Provides InputStream access to portions of a file combined with buffered reading of content. Start of next bytes to read can be set via seek method. File is accessed via RandomAccessFile and is read in byte chunks which are cached.

Author:
Timo Boehme (timo.boehme at ontochem com)

Constructor Summary
RandomAccessBufferedFileInputStream(java.io.File _file)
          Create input stream instance for given file.
 
Method Summary
 int available()
           
 void close()
          Release resources that are being held.
 long getFilePointer()
          Returns offset in file at which next byte would be read.
 long length()
          The total number of bytes that are available.
 int read()
          Read a single byte of data.
 int read(byte[] b, int off, int len)
          Read a buffer of data.
 void seek(long newOffset)
          Seeks to new position.
 long skip(long n)
           
 
Methods inherited from class java.io.InputStream
mark, markSupported, read, reset
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

RandomAccessBufferedFileInputStream

public RandomAccessBufferedFileInputStream(java.io.File _file)
                                    throws java.io.FileNotFoundException,
                                           java.io.IOException
Create input stream instance for given file.

Throws:
java.io.FileNotFoundException
java.io.IOException
Method Detail

getFilePointer

public long getFilePointer()
Returns offset in file at which next byte would be read.


seek

public void seek(long newOffset)
          throws java.io.IOException
Seeks to new position. If new position is outside of current page the new page is either taken from cache or read from file and added to cache.

Specified by:
seek in interface RandomAccessRead
Parameters:
newOffset - The position to seek to.
Throws:
java.io.IOException - If there is an error while seeking.

read

public int read()
         throws java.io.IOException
Description copied from interface: SequentialRead
Read a single byte of data.

Specified by:
read in interface SequentialRead
Specified by:
read in class java.io.InputStream
Returns:
The byte of data that is being read.
Throws:
java.io.IOException - If there is an error while reading the data.

read

public int read(byte[] b,
                int off,
                int len)
         throws java.io.IOException
Description copied from interface: SequentialRead
Read a buffer of data.

Specified by:
read in interface SequentialRead
Overrides:
read in class java.io.InputStream
Parameters:
b - The buffer to write the data to.
off - Offset into the buffer to start writing.
len - The amount of data to attempt to read.
Returns:
The number of bytes that were actually read.
Throws:
java.io.IOException - If there was an error while reading the data.

available

public int available()
              throws java.io.IOException
Overrides:
available 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

length

public long length()
            throws java.io.IOException
Description copied from interface: RandomAccessRead
The total number of bytes that are available.

Specified by:
length in interface RandomAccessRead
Returns:
The number of bytes available.
Throws:
java.io.IOException - If there is an IO error while determining the length of the data stream.

close

public void close()
           throws java.io.IOException
Description copied from interface: SequentialRead
Release resources that are being held.

Specified by:
close in interface java.io.Closeable
Specified by:
close in interface SequentialRead
Overrides:
close in class java.io.InputStream
Throws:
java.io.IOException - If there is an error closing this resource.