org.apache.pdfbox.io

## Class RandomAccessReadBufferedFile

- java.lang.Object
- - org.apache.pdfbox.io.RandomAccessReadBufferedFile

All Implemented Interfaces:
  Closeable, AutoCloseable, RandomAccessRead

    public class RandomAccessReadBufferedFile
    extends Object
    implements RandomAccessRead

Provides random 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 `FileChannel` and is read in ByteBuffer chunks which are cached.

Author:
  Timo Boehme

### Constructor Summary

Constructors
Constructor and Description
`RandomAccessReadBufferedFile(File file)` Create a random access buffered file instance for the given file.
`RandomAccessReadBufferedFile(Path path)` Create a random access buffered file instance using the given path.
`RandomAccessReadBufferedFile(String filename)` Create a random access buffered file instance for the file with the given name.

### Method Summary

All Methods Instance Methods Concrete Methods
`void` `close()`
`RandomAccessReadView` `createView(long startPosition, long streamLength)` Creates a random access read view starting at the given position with the given length.
`long` `getPosition()` Returns offset of next byte to be returned by a read method.
`boolean` `isClosed()` Returns true if this source has been closed.
`boolean` `isEOF()` A simple test to see if we are at the end of the data.
`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 position)` Seeks to new position.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface org.apache.pdfbox.io.RandomAccessRead

`available, peek, read, readFully, readFully, rewind, skip`

### Constructor Detail

#### RandomAccessReadBufferedFile

    public RandomAccessReadBufferedFile(String filename)
                                 throws IOException

Create a random access buffered file instance for the file with the given name.

Parameters:
  `filename` - the filename of the file to be read.
Throws:
  `IOException` - if something went wrong while accessing the given file.

#### RandomAccessReadBufferedFile

    public RandomAccessReadBufferedFile(File file)
                                 throws IOException

Create a random access buffered file instance for the given file.

Parameters:
  `file` - the file to be read.
Throws:
  `IOException` - if something went wrong while accessing the given file.

#### RandomAccessReadBufferedFile

    public RandomAccessReadBufferedFile(Path path)
                                 throws IOException

Create a random access buffered file instance using the given path.

Parameters:
  `path` - path of the file to be read.
Throws:
  `IOException` - if something went wrong while accessing the given file.

### Method Detail

#### getPosition

    public long getPosition()
                     throws IOException

Description copied from interface: `RandomAccessRead`
Returns offset of next byte to be returned by a read method.

Specified by:
  `getPosition` in interface `RandomAccessRead`
Returns:
  offset of next byte which will be returned with next `RandomAccessRead.read()` (if no more bytes are left it returns a value >= length of source)
Throws:
  `IOException` - If there was an error while getting the current position

#### seek

    public void seek(long position)
              throws 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:
  `position` - the position to seek to.
Throws:
  `IOException` - if something went wrong.

#### read

    public int read()
             throws IOException

Description copied from interface: `RandomAccessRead`
Read a single byte of data.

Specified by:
  `read` in interface `RandomAccessRead`
Returns:
  The byte of data that is being read.
Throws:
  `IOException` - If there is an error while reading the data.

#### read

    public int read(byte[] b,
                    int off,
                    int len)
             throws IOException

Description copied from interface: `RandomAccessRead`
Read a buffer of data.

Specified by:
  `read` in interface `RandomAccessRead`
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:
  `IOException` - If there was an error while reading the data.

#### length

    public long length()
                throws 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:
  `IOException` - If there is an IO error while determining the length of the data stream.

#### close

    public void close()
               throws IOException

Specified by:
  `close` in interface `Closeable`
Specified by:
  `close` in interface `AutoCloseable`
Throws:
  `IOException`

#### isClosed

    public boolean isClosed()

Description copied from interface: `RandomAccessRead`
Returns true if this source has been closed.

Specified by:
  `isClosed` in interface `RandomAccessRead`
Returns:
  true if the source has been closed

#### isEOF

    public boolean isEOF()
                  throws IOException

Description copied from interface: `RandomAccessRead`
A simple test to see if we are at the end of the data.

Specified by:
  `isEOF` in interface `RandomAccessRead`
Returns:
  true if we are at the end of the data.
Throws:
  `IOException` - If there is an error reading the next byte.

#### createView

    public RandomAccessReadView createView(long startPosition,
                                           long streamLength)
                                    throws IOException

Description copied from interface: `RandomAccessRead`
Creates a random access read view starting at the given position with the given length.

Specified by:
  `createView` in interface `RandomAccessRead`
Parameters:
  `startPosition` - start position within the underlying random access read
  `streamLength` - stream length
Returns:
  the random access read view
Throws:
  `IOException` - if something went wrong when creating the view for the RandomAccessRead