Package org.apache.pdfbox.io
Class NonSeekableRandomAccessReadInputStream
java.lang.Object
org.apache.pdfbox.io.NonSeekableRandomAccessReadInputStream
- All Implemented Interfaces:
Closeable,AutoCloseable,RandomAccessRead
An implementation of the RandomAccessRead interface using an InputStream as source.
It is optimized for a minimal memory footprint by using a small buffer to read from the input stream instead of
copying the whole input stream to memory. This reduces the random access read abilities, so that peek/rewind
operations are limited to the data within the buffer.
This class is meant to be used by consumers which process the data more or less in a serial manner and therefore
don't need full random access.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final intprivate final int[]private final byte[][]private static final intprotected intprivate final InputStreamprivate booleanprivate booleanprivate static final intprivate static final org.apache.commons.logging.Logprivate static final intprotected longprotected long -
Constructor Summary
ConstructorsConstructorDescriptionNonSeekableRandomAccessReadInputStream(InputStream inputStream) Default constructor. -
Method Summary
Modifier and TypeMethodDescriptionprotected voidEnsure that the RandomAccessBuffer is not closedvoidclose()createView(long startPosition, long streamLength) Creates a random access read view starting at the given position with the given length.private booleanfetch()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.voidrewind(int bytes) Seek backwards the given number of bytes.voidseek(long position) Seek to a position in the data.voidskip(int length) Skips a given number of bytes.private voidswitchBuffers(int firstBuffer, int secondBuffer) Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.apache.pdfbox.io.RandomAccessRead
available, peek, read
-
Field Details
-
LOG
private static final org.apache.commons.logging.Log LOG -
position
protected long position -
currentBufferPointer
protected int currentBufferPointer -
size
protected long size -
is
-
BUFFER_SIZE
private static final int BUFFER_SIZE- See Also:
-
CURRENT
private static final int CURRENT- See Also:
-
LAST
private static final int LAST- See Also:
-
NEXT
private static final int NEXT- See Also:
-
buffers
private final byte[][] buffers -
bufferBytes
private final int[] bufferBytes -
isClosed
private boolean isClosed -
isEOF
private boolean isEOF
-
-
Constructor Details
-
NonSeekableRandomAccessReadInputStream
Default constructor.
-
-
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.
-
skip
Description copied from interface:RandomAccessReadSkips a given number of bytes.- Specified by:
skipin interfaceRandomAccessRead- Parameters:
length- the number of bytes to be skipped- Throws:
IOException- if an I/O error occurs while reading data
-
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.
-
switchBuffers
private void switchBuffers(int firstBuffer, int secondBuffer) -
fetch
- Throws:
IOException
-
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.
-
rewind
Description copied from interface:RandomAccessReadSeek backwards the given number of bytes.- Specified by:
rewindin interfaceRandomAccessRead- Parameters:
bytes- the number of bytes to be seeked backwards- Throws:
IOException- If there is an error while seeking
-
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
-