Package loci.common
Class NIOInputStream
- java.lang.Object
-
- java.io.InputStream
-
- loci.common.NIOInputStream
-
- All Implemented Interfaces:
Closeable,DataInput,AutoCloseable
public class NIOInputStream extends InputStream implements DataInput
NIOInputStream provides methods for "intelligent" reading of files and byte arrays.
-
-
Field Summary
Fields Modifier and Type Field Description protected ChannelchannelThe file channel backed by the random access file.protected static intDEFAULT_BLOCK_SIZEBlock size to use when searching through the stream.protected FilefileThe file.protected StringfilenameThe file name.protected booleanisLittleEndianEndianness of the stream.protected static intMAX_SEARCH_SIZEMaximum number of bytes to search when searching through the stream.protected IRandomAccessraf
-
Constructor Summary
Constructors Constructor Description NIOInputStream(byte[] array)Constructs a random access stream around the given byte array.NIOInputStream(String filename)Constructs an NIOInputStream around the given file.NIOInputStream(IRandomAccess handle)Constructs a random access stream around the given handle.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description intavailable()voidclose()Closes the streams.StringfindString(boolean saveString, int blockSize, String... terminators)Reads or skips a string ending with one of the given terminating substrings, using the specified block size for buffering.StringfindString(boolean saveString, String... terminators)Reads or skips a string ending with one of the given terminating substrings.StringfindString(int blockSize, String... terminators)Reads a string ending with one of the given terminating substrings, using the specified block size for buffering.StringfindString(String... terminators)Reads a string ending with one of the given terminating substrings.longgetFilePointer()DataInputStreamgetInputStream()booleanisLittleEndian()longlength()Gets the number of bytes in the file.voidmark(int readLimit)booleanmarkSupported()voidorder(boolean isLittleEndian)Sets the endianness of the stream.intread()Alias for readByte().intread(byte[] array)Read bytes from the stream into the given array.intread(byte[] array, int offset, int n)Read n bytes from the stream into the given array at the specified offset.booleanreadBoolean()Read an input byte and return true if the byte is nonzero.bytereadByte()Read one byte and return it.charreadChar()Read an input char.StringreadCString()Read a string of arbitrary length, terminated by a null char.doublereadDouble()Read eight bytes and return a double value.floatreadFloat()Read four bytes and return a float value.voidreadFully(byte[] array)Read bytes from the stream into the given array.voidreadFully(byte[] array, int offset, int n)Read n bytes from the stream into the given array at the specified offset.intreadInt()Read four input bytes and return an int value.StringreadLine()Read the next line of text from the input stream.longreadLong()Read eight input bytes and return a long value.shortreadShort()Read two input bytes and return a short value.StringreadString(int n)Read a string of length n.StringreadString(String lastChars)Reads a string ending with one of the characters in the given string.intreadUnsignedByte()Read an input byte and zero extend it appropriately.intreadUnsignedShort()Read two bytes and return an int in the range 0 through 65535.StringreadUTF()Read a string that has been encoded using a modified UTF-8 format.voidreset()voidseek(long pos)Seeks to the given offset within the stream.voidsetExtend(int extend)Sets the number of bytes by which to extend the stream.intskipBytes(int n)Skip n bytes within the stream.-
Methods inherited from class java.io.InputStream
nullInputStream, readAllBytes, readNBytes, readNBytes, skip, transferTo
-
-
-
-
Field Detail
-
DEFAULT_BLOCK_SIZE
protected static final int DEFAULT_BLOCK_SIZE
Block size to use when searching through the stream. This value should not exceed MAX_OVERHEAD!- See Also:
- Constant Field Values
-
MAX_SEARCH_SIZE
protected static final int MAX_SEARCH_SIZE
Maximum number of bytes to search when searching through the stream.- See Also:
- Constant Field Values
-
raf
protected IRandomAccess raf
-
filename
protected String filename
The file name.
-
file
protected File file
The file.
-
channel
protected Channel channel
The file channel backed by the random access file.
-
isLittleEndian
protected boolean isLittleEndian
Endianness of the stream.
-
-
Constructor Detail
-
NIOInputStream
public NIOInputStream(String filename) throws IOException
Constructs an NIOInputStream around the given file.- Parameters:
filename- the path to a readable file on disk- Throws:
IOException- if the path is invalid or unreadable
-
NIOInputStream
public NIOInputStream(IRandomAccess handle)
Constructs a random access stream around the given handle.- Parameters:
handle- theIRandomAccessto wrap in a stream
-
NIOInputStream
public NIOInputStream(byte[] array)
Constructs a random access stream around the given byte array.- Parameters:
array- the byte array to wrap in a stream
-
-
Method Detail
-
getInputStream
public DataInputStream getInputStream()
- Returns:
- the underlying InputStream.
-
setExtend
public void setExtend(int extend)
Sets the number of bytes by which to extend the stream. This only applies to InputStream API methods.- Parameters:
extend- the number of bytes by which to extend the stream
-
seek
public void seek(long pos) throws IOExceptionSeeks to the given offset within the stream.- Parameters:
pos- the offset to which to seek- Throws:
IOException- if the seek is not successful
-
read
public int read() throws IOExceptionAlias for readByte().- Specified by:
readin classInputStream- Throws:
IOException
-
length
public long length() throws IOExceptionGets the number of bytes in the file.- Returns:
- the length of the stream in bytes
- Throws:
IOException- if the length cannot be retrieved
-
getFilePointer
public long getFilePointer()
- Returns:
- the current (absolute) file pointer.
-
close
public void close() throws IOExceptionCloses the streams.- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Overrides:
closein classInputStream- Throws:
IOException
-
order
public void order(boolean isLittleEndian)
Sets the endianness of the stream.- Parameters:
isLittleEndian- true if the stream order is little-endian
-
isLittleEndian
public boolean isLittleEndian()
- Returns:
- the endianness of the stream.
-
readString
public String readString(String lastChars) throws IOException
Reads a string ending with one of the characters in the given string.- Parameters:
lastChars- string containing possible final characters for the returned string- Returns:
- the smallest string that ends in one of the characters in
lastChars - Throws:
IOException- If the maximum length (512 MB) is exceeded.- See Also:
findString(String...)
-
findString
public String findString(String... terminators) throws IOException
Reads a string ending with one of the given terminating substrings.- Parameters:
terminators- The strings for which to search.- Returns:
- The string from the initial position through the end of the terminating sequence, or through the end of the stream if no terminating sequence is found.
- Throws:
IOException- If the maximum search length (512 MB) is exceeded.
-
findString
public String findString(boolean saveString, String... terminators) throws IOException
Reads or skips a string ending with one of the given terminating substrings.- Parameters:
saveString- Whether to collect the string from the current file pointer to the terminating bytes, and return it. If false, returns null.terminators- The strings for which to search.- Returns:
- The string from the initial position through the end of the terminating sequence, or through the end of the stream if no terminating sequence is found, or null if saveString flag is unset.
- Throws:
IOException- If saveString flag is set and the maximum search length (512 MB) is exceeded.IOException- If saveString flag is set and the maximum search length (512 MB) is exceeded.
-
findString
public String findString(int blockSize, String... terminators) throws IOException
Reads a string ending with one of the given terminating substrings, using the specified block size for buffering.- Parameters:
blockSize- The block size to use when reading bytes in chunks.terminators- The strings for which to search.- Returns:
- The string from the initial position through the end of the terminating sequence, or through the end of the stream if no terminating sequence is found.
- Throws:
IOException- If the maximum search length (512 MB) is exceeded.
-
findString
public String findString(boolean saveString, int blockSize, String... terminators) throws IOException
Reads or skips a string ending with one of the given terminating substrings, using the specified block size for buffering.- Parameters:
saveString- Whether to collect the string from the current file pointer to the terminating bytes, and return it. If false, returns null.blockSize- The block size to use when reading bytes in chunks.terminators- The strings for which to search.- Returns:
- The string from the initial position through the end of the terminating sequence, or through the end of the stream if no terminating sequence is found, or null if saveString flag is unset.
- Throws:
IOException- If saveString flag is set and the maximum search length (512 MB) is exceeded.
-
readBoolean
public boolean readBoolean() throws IOExceptionRead an input byte and return true if the byte is nonzero.- Specified by:
readBooleanin interfaceDataInput- Throws:
IOException
-
readByte
public byte readByte() throws IOExceptionRead one byte and return it.- Specified by:
readBytein interfaceDataInput- Throws:
IOException
-
readChar
public char readChar() throws IOExceptionRead an input char.- Specified by:
readCharin interfaceDataInput- Throws:
IOException
-
readDouble
public double readDouble() throws IOExceptionRead eight bytes and return a double value.- Specified by:
readDoublein interfaceDataInput- Throws:
IOException
-
readFloat
public float readFloat() throws IOExceptionRead four bytes and return a float value.- Specified by:
readFloatin interfaceDataInput- Throws:
IOException
-
readInt
public int readInt() throws IOExceptionRead four input bytes and return an int value.- Specified by:
readIntin interfaceDataInput- Throws:
IOException
-
readLine
public String readLine() throws IOException
Read the next line of text from the input stream.- Specified by:
readLinein interfaceDataInput- Throws:
IOException
-
readCString
public String readCString() throws IOException
Read a string of arbitrary length, terminated by a null char.- Returns:
- the smallest string such that the last character is a null byte
- Throws:
IOException- if a null-terminated string is not found- See Also:
findString(String...)
-
readString
public String readString(int n) throws IOException
Read a string of length n.- Parameters:
n- the number of bytes to read- Returns:
- a string representing the next
nbytes in the stream - Throws:
IOException- if there is an error during reading
-
readLong
public long readLong() throws IOExceptionRead eight input bytes and return a long value.- Specified by:
readLongin interfaceDataInput- Throws:
IOException
-
readShort
public short readShort() throws IOExceptionRead two input bytes and return a short value.- Specified by:
readShortin interfaceDataInput- Throws:
IOException
-
readUnsignedByte
public int readUnsignedByte() throws IOExceptionRead an input byte and zero extend it appropriately.- Specified by:
readUnsignedBytein interfaceDataInput- Throws:
IOException
-
readUnsignedShort
public int readUnsignedShort() throws IOExceptionRead two bytes and return an int in the range 0 through 65535.- Specified by:
readUnsignedShortin interfaceDataInput- Throws:
IOException
-
readUTF
public String readUTF() throws IOException
Read a string that has been encoded using a modified UTF-8 format.- Specified by:
readUTFin interfaceDataInput- Throws:
IOException
-
skipBytes
public int skipBytes(int n) throws IOExceptionSkip n bytes within the stream.- Specified by:
skipBytesin interfaceDataInput- Throws:
IOException
-
read
public int read(byte[] array) throws IOExceptionRead bytes from the stream into the given array.- Overrides:
readin classInputStream- Throws:
IOException
-
read
public int read(byte[] array, int offset, int n) throws IOExceptionRead n bytes from the stream into the given array at the specified offset.- Overrides:
readin classInputStream- Throws:
IOException
-
readFully
public void readFully(byte[] array) throws IOExceptionRead bytes from the stream into the given array.- Specified by:
readFullyin interfaceDataInput- Throws:
IOException
-
readFully
public void readFully(byte[] array, int offset, int n) throws IOExceptionRead n bytes from the stream into the given array at the specified offset.- Specified by:
readFullyin interfaceDataInput- Throws:
IOException
-
available
public int available() throws IOException- Overrides:
availablein classInputStream- Throws:
IOException
-
mark
public void mark(int readLimit)
- Overrides:
markin classInputStream
-
markSupported
public boolean markSupported()
- Overrides:
markSupportedin classInputStream
-
reset
public void reset() throws IOException- Overrides:
resetin classInputStream- Throws:
IOException
-
-