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 TypeFieldDescriptionprotected intprotected ByteBufferprotected intstatic final intprotected longprotected 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. -
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.intread()Read a single byte of data.intread(byte[] b, int offset, int length) Read a buffer of data.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 -
currentBuffer
-
pointer
protected long pointer -
currentBufferPointer
protected int currentBufferPointer -
size
protected long size
-
-
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
-
-
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.
-
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
-
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.
-