org.apache.pdfbox.io

## Class RandomAccessReadBuffer

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

All Implemented Interfaces:
  Closeable, AutoCloseable, RandomAccessRead

Direct Known Subclasses:
  RandomAccessReadWriteBuffer

    public class RandomAccessReadBuffer
    extends Object
    implements RandomAccessRead

An implementation of the RandomAccessRead interface to store data in memory. The data will be stored in chunks organized in an ArrayList.

### Field Summary

Fields
`protected int` `chunkSize`
`protected ByteBuffer` `currentBuffer`
`protected int` `currentBufferPointer`
`static int` `DEFAULT_CHUNK_SIZE_4KB`
`protected long` `pointer`
`protected long` `size`

### Constructor Summary

Constructors
`protected` `RandomAccessReadBuffer()` Default constructor.
`` `RandomAccessReadBuffer(byte[] input)` Create a random access buffer using the given byte array.
`` `RandomAccessReadBuffer(ByteBuffer input)` Create a random access buffer using the given ByteBuffer.
`` `RandomAccessReadBuffer(InputStream input)` Create a random access read buffer of the given input stream by copying the data to the memory.
`protected` `RandomAccessReadBuffer(int definedChunkSize)` Default constructor.

### Method Summary

All Methods Static Methods Instance Methods Concrete Methods
`protected void` `checkClosed()` Ensure that the RandomAccessBuffer is not closed
`void` `close()`
`static RandomAccessReadBuffer` `createBufferFromStream(InputStream inputStream)` Create e new RandomAccessReadBuffer using the given InputStream.
`RandomAccessReadView` `createView(long startPosition, long streamLength)` Creates a random access read view starting at the given position with the given length.
`protected void` `expandBuffer()` create a new buffer chunk and adjust all pointers and indices.
`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 offset, int length)` Read a buffer of data.
`protected void` `resetBuffers()` Reset to position 0 and remove all buffers but the first one.
`void` `seek(long position)` Seek to a position in the data.

### 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`

### Field Detail

#### DEFAULT_CHUNK_SIZE_4KB

    public static final int DEFAULT_CHUNK_SIZE_4KB

See Also:
  Constant Field Values

#### chunkSize

    protected int chunkSize

#### currentBuffer

    protected ByteBuffer currentBuffer

#### pointer

    protected long pointer

#### currentBufferPointer

    protected int currentBufferPointer

#### size

    protected long size

### Constructor Detail

#### RandomAccessReadBuffer

    protected RandomAccessReadBuffer()

Default constructor.

#### RandomAccessReadBuffer

    protected RandomAccessReadBuffer(int definedChunkSize)

Default constructor.

#### RandomAccessReadBuffer

    public RandomAccessReadBuffer(byte[] input)

Create a random access buffer using the given byte array.

Parameters:
  `input` - the byte array to be read

#### RandomAccessReadBuffer

    public RandomAccessReadBuffer(ByteBuffer input)

Create a random access buffer using the given ByteBuffer.

Parameters:
  `input` - the ByteBuffer to be read

#### RandomAccessReadBuffer

    public RandomAccessReadBuffer(InputStream input)
                           throws IOException

Create a random access read buffer of the given input stream by copying the data to the memory.

Parameters:
  `input` - the input stream to be read
Throws:
  `IOException` - if something went wrong while copying the data

### Method Detail

#### close

    public void close()
               throws IOException

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

#### seek

    public void seek(long position)
              throws IOException

Seek to a position in the data.

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

#### getPosition

    public long getPosition()
                     throws IOException

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

#### read

    public int read()
             throws IOException

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 offset,
                    int length)
             throws IOException

Read a buffer of data.

Specified by:
  `read` in interface `RandomAccessRead`
Parameters:
  `b` - The buffer to write the data to.
  `offset` - Offset into the buffer to start writing.
  `length` - 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

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.

#### expandBuffer

    protected void expandBuffer()
                         throws IOException

create a new buffer chunk and adjust all pointers and indices.

Throws:
  `IOException`

#### checkClosed

    protected void checkClosed()
                        throws IOException

Ensure that the RandomAccessBuffer is not closed

Throws:
  `IOException` - If RandomAccessBuffer already closed

#### isClosed

    public boolean isClosed()

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

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

#### createBufferFromStream

    public static RandomAccessReadBuffer createBufferFromStream(InputStream inputStream)
                                                         throws IOException

Create e new RandomAccessReadBuffer using the given InputStream. The data is copied to the memory and the InputStream is closed.

Parameters:
  `inputStream` - the InputStream holding the data to be copied
Returns:
  the RandomAccessReadBuffer holding the data of the InputStream
Throws:
  `IOException` - if something went wrong while copying the data

#### resetBuffers

    protected void resetBuffers()

Reset to position 0 and remove all buffers but the first one.