Package org.apache.pdfbox.io
Class RandomAccessBufferedFileInputStream
- java.lang.Object
-
- java.io.InputStream
-
- org.apache.pdfbox.io.RandomAccessBufferedFileInputStream
-
- All Implemented Interfaces:
java.io.Closeable,java.lang.AutoCloseable,RandomAccessRead
public class RandomAccessBufferedFileInputStream extends java.io.InputStream implements RandomAccessRead
ProvidesInputStreamaccess 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 viaRandomAccessFileand is read in byte chunks which are cached.- Author:
- Timo Boehme
-
-
Constructor Summary
Constructors Constructor Description RandomAccessBufferedFileInputStream(java.io.File file)Create a random access input stream instance for the given file.RandomAccessBufferedFileInputStream(java.io.InputStream input)Create a random access input stream for the given input stream by copying the data to a temporary file.RandomAccessBufferedFileInputStream(java.lang.String filename)Create a random access input stream instance for the file with the given name.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description intavailable()Returns an estimate of the number of bytes that can be read.voidclose()longgetPosition()Returns offset in file at which next byte would be read.booleanisClosed()Returns true if this stream 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.intpeek()This will peek at the next byte.intread()Read a single byte of data.intread(byte[] b)Read a buffer of data.intread(byte[] b, int off, int len)Read a buffer of data.byte[]readFully(int length)Reads a given number of bytes.voidrewind(int bytes)Seek backwards the given number of bytes.voidseek(long newOffset)Seeks to new position.longskip(long n)
-
-
-
Constructor Detail
-
RandomAccessBufferedFileInputStream
public RandomAccessBufferedFileInputStream(java.lang.String filename) throws java.io.IOExceptionCreate a random access input stream instance for the file with the given name.- Parameters:
filename- the filename of the file to be read.- Throws:
java.io.IOException- if something went wrong while accessing the given file.
-
RandomAccessBufferedFileInputStream
public RandomAccessBufferedFileInputStream(java.io.File file) throws java.io.IOExceptionCreate a random access input stream instance for the given file.- Parameters:
file- the file to be read.- Throws:
java.io.IOException- if something went wrong while accessing the given file.
-
RandomAccessBufferedFileInputStream
public RandomAccessBufferedFileInputStream(java.io.InputStream input) throws java.io.IOExceptionCreate a random access input stream for the given input stream by copying the data to a temporary file.- Parameters:
input- the input stream to be read. It will be closed by this method.- Throws:
java.io.IOException- if something went wrong while creating the temporary file.
-
-
Method Detail
-
getPosition
public long getPosition()
Returns offset in file at which next byte would be read.- 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)
-
seek
public void seek(long newOffset) throws java.io.IOExceptionSeeks 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:
newOffset- the position to seek to.- Throws:
java.io.IOException- if something went wrong.
-
read
public int read() throws java.io.IOExceptionDescription copied from interface:RandomAccessReadRead a single byte of data.- Specified by:
readin interfaceRandomAccessRead- Specified by:
readin classjava.io.InputStream- Returns:
- The byte of data that is being read.
- Throws:
java.io.IOException- If there is an error while reading the data.
-
read
public int read(byte[] b) throws java.io.IOExceptionDescription copied from interface:RandomAccessReadRead a buffer of data.- Specified by:
readin interfaceRandomAccessRead- Overrides:
readin classjava.io.InputStream- Parameters:
b- The buffer to write the data to.- Returns:
- The number of bytes that were actually read.
- Throws:
java.io.IOException- If there was an error while reading the data.
-
read
public int read(byte[] b, int off, int len) throws java.io.IOExceptionDescription copied from interface:RandomAccessReadRead a buffer of data.- Specified by:
readin interfaceRandomAccessRead- Overrides:
readin classjava.io.InputStream- 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:
java.io.IOException- If there was an error while reading the data.
-
available
public int available() throws java.io.IOExceptionDescription copied from interface:RandomAccessReadReturns an estimate of the number of bytes that can be read.- Specified by:
availablein interfaceRandomAccessRead- Overrides:
availablein classjava.io.InputStream- Returns:
- the number of bytes that can be read
- Throws:
java.io.IOException- if this random access has been closed
-
skip
public long skip(long n) throws java.io.IOException- Overrides:
skipin classjava.io.InputStream- Throws:
java.io.IOException
-
length
public long length() throws java.io.IOExceptionDescription copied from interface:RandomAccessReadThe total number of bytes that are available.- Specified by:
lengthin interfaceRandomAccessRead- Returns:
- The number of bytes available.
- Throws:
java.io.IOException- If there is an IO error while determining the length of the data stream.
-
close
public void close() throws java.io.IOException- Specified by:
closein interfacejava.lang.AutoCloseable- Specified by:
closein interfacejava.io.Closeable- Overrides:
closein classjava.io.InputStream- Throws:
java.io.IOException
-
isClosed
public boolean isClosed()
Description copied from interface:RandomAccessReadReturns true if this stream has been closed.- Specified by:
isClosedin interfaceRandomAccessRead
-
peek
public int peek() throws java.io.IOExceptionDescription copied from interface:RandomAccessReadThis will peek at the next byte.- Specified by:
peekin interfaceRandomAccessRead- Returns:
- The next byte on the stream, leaving it as available to read.
- Throws:
java.io.IOException- If there is an error reading the next byte.
-
rewind
public void rewind(int bytes) throws java.io.IOExceptionDescription 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:
java.io.IOException- If there is an error while seeking
-
readFully
public byte[] readFully(int length) throws java.io.IOExceptionDescription copied from interface:RandomAccessReadReads a given number of bytes.- Specified by:
readFullyin interfaceRandomAccessRead- Parameters:
length- the number of bytes to be read- Returns:
- a byte array containing the bytes just read
- Throws:
java.io.IOException- if an I/O error occurs while reading data
-
isEOF
public boolean isEOF() throws java.io.IOExceptionDescription 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:
java.io.IOException- If there is an error reading the next byte.
-
-