Package org.apache.pdfbox.io
Class RandomAccessReadBuffer
java.lang.Object
org.apache.pdfbox.io.RandomAccessReadBuffer
- All Implemented Interfaces:
Closeable,AutoCloseable,RandomAccessRead
- Direct Known Subclasses:
RandomAccessReadWriteBuffer
An implementation of the RandomAccessRead interface to store data in memory. The data will be stored in chunks
organized in an ArrayList.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final List<ByteBuffer> private intprivate intprotected intprotected ByteBufferprotected intstatic final intprotected longprivate final ConcurrentMap<Long, RandomAccessReadBuffer> protected long -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedDefault constructor.RandomAccessReadBuffer(byte[] input) Create a random access buffer using the given byte array.protectedRandomAccessReadBuffer(int definedChunkSize) Default constructor.Create a random access read buffer of the given input stream by copying the data to the memory.RandomAccessReadBuffer(ByteBuffer input) Create a random access buffer using the given ByteBuffer.private -
Method Summary
Modifier and TypeMethodDescriptionprotected voidEnsure that the RandomAccessBuffer is not closedvoidclose()static RandomAccessReadBuffercreateBufferFromStream(InputStream inputStream) Create e new RandomAccessReadBuffer using the given InputStream.createView(long startPosition, long streamLength) Creates a random access read view starting at the given position with the given length.protected voidcreate a new buffer chunk and adjust all pointers and indices.longReturns offset of next byte to be returned by a read method.booleanisClosed()Returns true if this source has been closed.booleanisEOF()A simple test to see if we are at the end of the data.longlength()The total number of bytes that are available.private voidswitch to the next buffer chunk and reset the buffer pointer.intread()Read a single byte of data.intread(byte[] b, int offset, int length) Read a buffer of data.private intreadRemainingBytes(byte[] b, int offset, int length) protected voidReset to position 0 and remove all buffers but the first one.voidseek(long position) Seek to a position in the data.
-
Field Details
-
DEFAULT_CHUNK_SIZE_4KB
public static final int DEFAULT_CHUNK_SIZE_4KB- See Also:
-
chunkSize
protected int chunkSize -
bufferList
-
currentBuffer
-
pointer
protected long pointer -
currentBufferPointer
protected int currentBufferPointer -
size
protected long size -
bufferListIndex
private int bufferListIndex -
bufferListMaxIndex
private int bufferListMaxIndex -
rarbCopies
-
-
Constructor Details
-
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
Create a random access buffer using the given ByteBuffer.- Parameters:
input- the ByteBuffer to be read
-
RandomAccessReadBuffer
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
-
RandomAccessReadBuffer
-
-
Method Details
-
close
- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Throws:
IOException
-
seek
Seek to a position in the data.- Specified by:
seekin interfaceRandomAccessRead- Parameters:
position- The position to seek to.- Throws:
IOException- If there is an error while seeking.
-
getPosition
Returns offset of next byte to be returned by a read method.- Specified by:
getPositionin interfaceRandomAccessRead- 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
Read a single byte of data.- Specified by:
readin interfaceRandomAccessRead- Returns:
- The byte of data that is being read.
- Throws:
IOException- If there is an error while reading the data.
-
read
Read a buffer of data.- Specified by:
readin interfaceRandomAccessRead- 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.
-
readRemainingBytes
private int readRemainingBytes(byte[] b, int offset, int length) -
length
The total number of bytes that are available.- Specified by:
lengthin interfaceRandomAccessRead- Returns:
- The number of bytes available.
- Throws:
IOException- If there is an IO error while determining the length of the data stream.
-
expandBuffer
create a new buffer chunk and adjust all pointers and indices.- Throws:
IOException
-
nextBuffer
switch to the next buffer chunk and reset the buffer pointer.- Throws:
IOException
-
checkClosed
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:
isClosedin interfaceRandomAccessRead- Returns:
- true if the source has been closed
-
isEOF
A simple test to see if we are at the end of the data.- Specified by:
isEOFin interfaceRandomAccessRead- Returns:
- true if we are at the end of the data.
- Throws:
IOException- If there is an error reading the next byte.
-
createView
Description copied from interface:RandomAccessReadCreates a random access read view starting at the given position with the given length.- Specified by:
createViewin interfaceRandomAccessRead- Parameters:
startPosition- start position within the underlying random access readstreamLength- 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.
-