Package org.apache.pdfbox.io
Class RandomAccessReadBufferedFile
java.lang.Object
org.apache.pdfbox.io.RandomAccessReadBufferedFile
- All Implemented Interfaces:
Closeable,AutoCloseable,RandomAccessRead
Provides random access to portions of a file combined with buffered reading of content. Start of next bytes to read
can be set via seek method.
File is accessed via
FileChannel and is read in ByteBuffer chunks which are cached.-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate ByteBufferprivate longprivate final FileChannelprivate final longprivate longprivate booleanprivate ByteBufferprivate static final intprivate intprivate static final longprivate static final intprivate static final intprivate final Map<Long, ByteBuffer> Create a LRU page cache.private final Pathprivate final ConcurrentMap<Long, RandomAccessReadBufferedFile> -
Constructor Summary
ConstructorsConstructorDescriptionCreate a random access buffered file instance for the given file.RandomAccessReadBufferedFile(String filename) Create a random access buffered file instance for the file with the given name.Create a random access buffered file instance using the given path. -
Method Summary
Modifier and TypeMethodDescriptionprivate 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 off, int len) Read a buffer of data.private ByteBufferreadPage()Reads a page with data from current file position.voidseek(long position) Seeks to new position.
-
Field Details
-
PAGE_SIZE_SHIFT
private static final int PAGE_SIZE_SHIFT- See Also:
-
PAGE_SIZE
private static final int PAGE_SIZE- See Also:
-
PAGE_OFFSET_MASK
private static final long PAGE_OFFSET_MASK- See Also:
-
MAX_CACHED_PAGES
private static final int MAX_CACHED_PAGES- See Also:
-
rafCopies
-
lastRemovedCachePage
-
pageCache
Create a LRU page cache. -
curPageOffset
private long curPageOffset -
curPage
-
offsetWithinPage
private int offsetWithinPage -
fileChannel
-
path
-
fileLength
private final long fileLength -
fileOffset
private long fileOffset -
isClosed
private boolean isClosed
-
-
Constructor Details
-
RandomAccessReadBufferedFile
Create a random access buffered file instance for the file with the given name.- Parameters:
filename- the filename of the file to be read.- Throws:
IOException- if something went wrong while accessing the given file.
-
RandomAccessReadBufferedFile
Create a random access buffered file instance for the given file.- Parameters:
file- the file to be read.- Throws:
IOException- if something went wrong while accessing the given file.
-
RandomAccessReadBufferedFile
Create a random access buffered file instance using the given path.- Parameters:
path- path of the file to be read.- Throws:
IOException- if something went wrong while accessing the given file.
-
-
Method Details
-
getPosition
Description copied from interface:RandomAccessReadReturns 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
-
seek
Seeks to new position. If new position is outside of current page the new page is either taken from cache or read from file and added to cache.- Specified by:
seekin interfaceRandomAccessRead- Parameters:
position- the position to seek to.- Throws:
IOException- if something went wrong.
-
readPage
Reads a page with data from current file position. If we have a previously removed page from cache the buffer of this page is reused. Otherwise a new byte buffer is created.- Throws:
IOException
-
read
Description copied from interface:RandomAccessReadRead 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
Description copied from interface:RandomAccessReadRead a buffer of data.- Specified by:
readin interfaceRandomAccessRead- Parameters:
b- The buffer to write the data to.off- Offset into the buffer to start writing.len- 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
Description copied from interface:RandomAccessReadThe 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.
-
close
- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Throws:
IOException
-
isClosed
public boolean isClosed()Description copied from interface:RandomAccessReadReturns true if this source has been closed.- Specified by:
isClosedin interfaceRandomAccessRead- Returns:
- true if the source has been closed
-
checkClosed
Ensure that the RandomAccessBuffer is not closed- Throws:
IOException- If RandomAccessBuffer already closed
-
isEOF
Description copied from interface:RandomAccessReadA 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
-