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 TypeFieldDescriptionprotected intprotected longprotected long -
Constructor Summary
ConstructorsConstructorDescriptionNonSeekableRandomAccessReadInputStream(InputStream inputStream) Default constructor. -
Method Summary
Modifier and TypeMethodDescriptionintReturns an estimate of the number of bytes that can be read (or skipped over) from the underlying input stream without blocking, which may be 0, or 0 when end of stream is detected.protected 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.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.voidreadFully(byte[] b, int offset, int length) Same asRandomAccessRead.read(byte[], int, int)but will loop until exactly length bytes are read or it will throw an exception.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.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
peek, read, readFully
-
Field Details
-
position
protected long position -
currentBufferPointer
protected int currentBufferPointer -
size
protected long size
-
-
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.
-
readFully
Description copied from interface:RandomAccessReadSame asRandomAccessRead.read(byte[], int, int)but will loop until exactly length bytes are read or it will throw an exception.- Specified by:
readFullyin interfaceRandomAccessRead- Parameters:
b- The buffer to write the data to.offset- Offset into the buffer to start writing.length- The exact amount of data to attempt to read.- Throws:
IOException
-
available
Returns an estimate of the number of bytes that can be read (or skipped over) from the underlying input stream without blocking, which may be 0, or 0 when end of stream is detected.- Specified by:
availablein interfaceRandomAccessRead- Returns:
- the number of bytes that can be read
- Throws:
IOException- if this random access has been closed
-
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
-