Package loci.common
Class NIOFileHandle
java.lang.Object
loci.common.AbstractNIOHandle
loci.common.NIOFileHandle
- All Implemented Interfaces:
java.io.DataInput
,java.io.DataOutput
,IRandomAccess
public class NIOFileHandle extends AbstractNIOHandle
A wrapper for buffered NIO logic that implements the IRandomAccess interface.
- Author:
- Chris Allan (callan at blackcat dot ca)
- See Also:
IRandomAccess
,RandomAccessFile
-
Field Summary
Fields Modifier and Type Field Description protected java.nio.ByteBuffer
buffer
The buffer itself.protected int
bufferSize
The buffer size.protected long
bufferStartPosition
The absolute position of the start of the buffer.protected NIOByteBufferProvider
byteBufferProvider
Provider class for NIO byte buffers, allocated or memory mapped.protected java.nio.channels.FileChannel
channel
The file channel backed by the random access file.protected static int
defaultBufferSize
Default NIO buffer size to facilitate buffered I/O.protected static int
defaultRWBufferSize
Default NIO buffer size to facilitate buffered I/O for read/write streams.protected boolean
isReadWrite
Whether or not the file is opened read/write.protected java.nio.channels.FileChannel.MapMode
mapMode
The default map mode for the file.protected java.nio.ByteOrder
order
The buffer's byte ordering.protected long
position
The absolute position within the file.protected java.io.RandomAccessFile
raf
The random access file object backing this FileHandle. -
Constructor Summary
Constructors Constructor Description NIOFileHandle(java.io.File file, java.lang.String mode)
Creates a random access file stream to read from, and optionally to write to, the file specified by the File argument.NIOFileHandle(java.io.File file, java.lang.String mode, int bufferSize)
Creates a random access file stream to read from, and optionally to write to, the file specified by the File argument.NIOFileHandle(java.lang.String name, java.lang.String mode)
Creates a random access file stream to read from, and optionally to write to, a file with the specified name. -
Method Summary
Modifier and Type Method Description void
close()
Closes this random access stream and releases any system resources associated with the stream.int
getBufferSize()
java.nio.channels.FileChannel
getFileChannel()
long
getFilePointer()
Returns the current offset in this stream.java.nio.ByteOrder
getOrder()
Returns the current order (endianness) of the stream.java.io.RandomAccessFile
getRandomAccessFile()
long
length()
Returns the length of this stream.int
read(byte[] b)
Reads up to b.length bytes of data from this stream into an array of bytes.int
read(byte[] b, int off, int len)
Reads up to len bytes of data from this stream into an array of bytes.int
read(java.nio.ByteBuffer buf)
Reads up to buffer.capacity() bytes of data from this stream into a ByteBuffer.int
read(java.nio.ByteBuffer buf, int off, int len)
Reads up to len bytes of data from this stream into a ByteBuffer.boolean
readBoolean()
byte
readByte()
char
readChar()
double
readDouble()
float
readFloat()
void
readFully(byte[] b)
void
readFully(byte[] b, int off, int len)
int
readInt()
java.lang.String
readLine()
long
readLong()
short
readShort()
int
readUnsignedByte()
int
readUnsignedShort()
java.lang.String
readUTF()
void
seek(long pos)
Sets the stream pointer offset, measured from the beginning of this stream, at which the next read or write occurs.static void
setDefaultBufferSize(int size)
Set the default buffer size for read-only files.static void
setDefaultReadWriteBufferSize(int size)
Set the default buffer size for read/write files.void
setLength(long length)
Sets the new length of the handle.void
setOrder(java.nio.ByteOrder order)
Sets the byte order (endianness) of the stream.int
skipBytes(int n)
long
skipBytes(long n)
Along
variant ofDataInput.skipBytes(int)
.void
write(byte[] b)
void
write(byte[] b, int off, int len)
void
write(int b)
void
write(java.nio.ByteBuffer buf)
Writes up to buffer.capacity() bytes of data from the given ByteBuffer to this stream.void
write(java.nio.ByteBuffer buf, int off, int len)
Writes up to len bytes of data from the given ByteBuffer to this stream.void
writeBoolean(boolean v)
void
writeByte(int v)
void
writeBytes(java.lang.String s)
void
writeChar(int v)
void
writeChars(java.lang.String s)
void
writeDouble(double v)
void
writeFloat(float v)
void
writeInt(int v)
void
writeLong(long v)
void
writeShort(int v)
void
writeUTF(java.lang.String str)
-
Field Details
-
defaultBufferSize
protected static int defaultBufferSizeDefault NIO buffer size to facilitate buffered I/O. -
defaultRWBufferSize
protected static int defaultRWBufferSizeDefault NIO buffer size to facilitate buffered I/O for read/write streams. -
raf
protected java.io.RandomAccessFile rafThe random access file object backing this FileHandle. -
channel
protected java.nio.channels.FileChannel channelThe file channel backed by the random access file. -
position
protected long positionThe absolute position within the file. -
bufferStartPosition
protected long bufferStartPositionThe absolute position of the start of the buffer. -
bufferSize
protected int bufferSizeThe buffer size. -
buffer
protected java.nio.ByteBuffer bufferThe buffer itself. -
isReadWrite
protected boolean isReadWriteWhether or not the file is opened read/write. -
mapMode
protected java.nio.channels.FileChannel.MapMode mapModeThe default map mode for the file. -
order
protected java.nio.ByteOrder orderThe buffer's byte ordering. -
byteBufferProvider
Provider class for NIO byte buffers, allocated or memory mapped.
-
-
Constructor Details
-
NIOFileHandle
public NIOFileHandle(java.io.File file, java.lang.String mode, int bufferSize) throws java.io.IOExceptionCreates a random access file stream to read from, and optionally to write to, the file specified by the File argument.- Parameters:
file
- aFile
representing a file on diskmode
- the access mode;r
(read only) andrw
(read/write) are supportedbufferSize
- the size of the buffer used to speed up reading and writing- Throws:
java.io.IOException
- if there is an error accessing the file
-
NIOFileHandle
public NIOFileHandle(java.io.File file, java.lang.String mode) throws java.io.IOExceptionCreates a random access file stream to read from, and optionally to write to, the file specified by the File argument.- Parameters:
file
- aFile
representing a file on diskmode
- the access mode;r
(read only) andrw
(read/write) are supported- Throws:
java.io.IOException
- if there is an error accessing the file
-
NIOFileHandle
public NIOFileHandle(java.lang.String name, java.lang.String mode) throws java.io.IOExceptionCreates a random access file stream to read from, and optionally to write to, a file with the specified name.- Parameters:
name
- the path to a file on diskmode
- the access mode;r
(read only) andrw
(read/write) are supported- Throws:
java.io.IOException
- if there is an error accessing the file
-
-
Method Details
-
setDefaultBufferSize
public static void setDefaultBufferSize(int size)Set the default buffer size for read-only files. Subsequent uses of the NIOFileHandle(String, String) and NIOFileHandle(File, String) constructors will use this buffer size.- Parameters:
size
- the new default buffer size
-
setDefaultReadWriteBufferSize
public static void setDefaultReadWriteBufferSize(int size)Set the default buffer size for read/write files. Subsequent uses of the NIOFileHandle(String, String) and NIOFileHandle(File, String) constructors will use this buffer size.- Parameters:
size
- the new default buffer size
-
getRandomAccessFile
public java.io.RandomAccessFile getRandomAccessFile()- Returns:
- the random access file object backing this FileHandle.
-
getFileChannel
public java.nio.channels.FileChannel getFileChannel()- Returns:
- the FileChannel from this FileHandle.
-
getBufferSize
public int getBufferSize()- Returns:
- the current buffer size.
-
setLength
public void setLength(long length) throws java.io.IOExceptionDescription copied from class:AbstractNIOHandle
Sets the new length of the handle.- Specified by:
setLength
in classAbstractNIOHandle
- Parameters:
length
- New length.- Throws:
java.io.IOException
- If there is an error changing the handle's length.
-
close
public void close() throws java.io.IOExceptionDescription copied from interface:IRandomAccess
Closes this random access stream and releases any system resources associated with the stream.- Throws:
java.io.IOException
- if the underlying stream(s) could not be closed
-
getFilePointer
public long getFilePointer()Description copied from interface:IRandomAccess
Returns the current offset in this stream.- Returns:
- the current byte offset within the file; expected to be non-negative and less than the value of #length()
-
length
public long length() throws java.io.IOExceptionDescription copied from interface:IRandomAccess
Returns the length of this stream.- Returns:
- the length in bytes of the stream
- Throws:
java.io.IOException
- if the length cannot be retrieved
-
getOrder
public java.nio.ByteOrder getOrder()Description copied from interface:IRandomAccess
Returns the current order (endianness) of the stream.- Returns:
- See above.
-
setOrder
public void setOrder(java.nio.ByteOrder order)Description copied from interface:IRandomAccess
Sets the byte order (endianness) of the stream.- Parameters:
order
- Order to set.
-
read
public int read(byte[] b) throws java.io.IOExceptionDescription copied from interface:IRandomAccess
Reads up to b.length bytes of data from this stream into an array of bytes.- Parameters:
b
- the array to fill from this stream- Returns:
- the total number of bytes read into the buffer.
- Throws:
java.io.IOException
- if reading is not possible
-
read
public int read(byte[] b, int off, int len) throws java.io.IOExceptionDescription copied from interface:IRandomAccess
Reads up to len bytes of data from this stream into an array of bytes.- Parameters:
b
- the array to fill from this streamoff
- the offset inb
from which to start filling; expected to be non-negative and no greater thanb.length - len
len
- the number of bytes to read; expected to be positive and no greater thanb.length - offset
- Returns:
- the total number of bytes read into the buffer.
- Throws:
java.io.IOException
- if reading is not possible
-
read
public int read(java.nio.ByteBuffer buf) throws java.io.IOExceptionDescription copied from interface:IRandomAccess
Reads up to buffer.capacity() bytes of data from this stream into a ByteBuffer.- Parameters:
buf
- the ByteBuffer to fill from this stream- Returns:
- the total number of bytes read into the buffer.
- Throws:
java.io.IOException
- if reading is not possible
-
read
public int read(java.nio.ByteBuffer buf, int off, int len) throws java.io.IOExceptionDescription copied from interface:IRandomAccess
Reads up to len bytes of data from this stream into a ByteBuffer.- Parameters:
buf
- the ByteBuffer to fill from this streamoff
- the offset inb
from which to start filling; expected to be non-negative and no greater thanbuffer.capacity() - len
len
- the number of bytes to read; expected to be positive and no greater thanbuffer.capacity() - offset
- Returns:
- the total number of bytes read into the buffer.
- Throws:
java.io.IOException
- if reading is not possible
-
seek
public void seek(long pos) throws java.io.IOExceptionDescription copied from interface:IRandomAccess
Sets the stream pointer offset, measured from the beginning of this stream, at which the next read or write occurs.- Parameters:
pos
- new byte offset (pointer) in the current stream. Unless otherwise noted, may be larger or smaller than the current pointer, but must be non-negative and less than the value of #length()- Throws:
java.io.IOException
- ifpos
is invalid or the seek fails- See Also:
IRandomAccess.getFilePointer()
-
readBoolean
public boolean readBoolean() throws java.io.IOException- Throws:
java.io.IOException
-
readByte
public byte readByte() throws java.io.IOException- Throws:
java.io.IOException
-
readChar
public char readChar() throws java.io.IOException- Throws:
java.io.IOException
-
readDouble
public double readDouble() throws java.io.IOException- Throws:
java.io.IOException
-
readFloat
public float readFloat() throws java.io.IOException- Throws:
java.io.IOException
-
readFully
public void readFully(byte[] b) throws java.io.IOException- Throws:
java.io.IOException
-
readFully
public void readFully(byte[] b, int off, int len) throws java.io.IOException- Throws:
java.io.IOException
-
readInt
public int readInt() throws java.io.IOException- Throws:
java.io.IOException
-
readLine
public java.lang.String readLine() throws java.io.IOException- Throws:
java.io.IOException
-
readLong
public long readLong() throws java.io.IOException- Throws:
java.io.IOException
-
readShort
public short readShort() throws java.io.IOException- Throws:
java.io.IOException
-
readUnsignedByte
public int readUnsignedByte() throws java.io.IOException- Throws:
java.io.IOException
-
readUnsignedShort
public int readUnsignedShort() throws java.io.IOException- Throws:
java.io.IOException
-
readUTF
public java.lang.String readUTF() throws java.io.IOException- Throws:
java.io.IOException
-
skipBytes
public int skipBytes(int n) throws java.io.IOException- Throws:
java.io.IOException
-
skipBytes
public long skipBytes(long n) throws java.io.IOExceptionDescription copied from interface:IRandomAccess
Along
variant ofDataInput.skipBytes(int)
.- Parameters:
n
- the number of bytes to skip- Returns:
- the number of bytes skipped
- Throws:
java.io.IOException
- if the operation failed
-
write
public void write(byte[] b) throws java.io.IOException- Throws:
java.io.IOException
-
write
public void write(byte[] b, int off, int len) throws java.io.IOException- Throws:
java.io.IOException
-
write
public void write(java.nio.ByteBuffer buf) throws java.io.IOExceptionDescription copied from interface:IRandomAccess
Writes up to buffer.capacity() bytes of data from the given ByteBuffer to this stream.- Parameters:
buf
- the ByteBuffer containing bytes to write to this stream- Throws:
java.io.IOException
- if writing is not possible
-
write
public void write(java.nio.ByteBuffer buf, int off, int len) throws java.io.IOExceptionDescription copied from interface:IRandomAccess
Writes up to len bytes of data from the given ByteBuffer to this stream.- Parameters:
buf
- the ByteBuffer containing bytes to write to this streamoff
- the offset inb
from which to start writing; expected to be non-negative and no greater thanbuf.capacity() - len
len
- the number of bytes to write; expected to be positive and no greater thanbuf.capacity() - offset
- Throws:
java.io.IOException
- if writing is not possible
-
write
public void write(int b) throws java.io.IOException- Throws:
java.io.IOException
-
writeBoolean
public void writeBoolean(boolean v) throws java.io.IOException- Throws:
java.io.IOException
-
writeByte
public void writeByte(int v) throws java.io.IOException- Throws:
java.io.IOException
-
writeBytes
public void writeBytes(java.lang.String s) throws java.io.IOException- Throws:
java.io.IOException
-
writeChar
public void writeChar(int v) throws java.io.IOException- Throws:
java.io.IOException
-
writeChars
public void writeChars(java.lang.String s) throws java.io.IOException- Throws:
java.io.IOException
-
writeDouble
public void writeDouble(double v) throws java.io.IOException- Throws:
java.io.IOException
-
writeFloat
public void writeFloat(float v) throws java.io.IOException- Throws:
java.io.IOException
-
writeInt
public void writeInt(int v) throws java.io.IOException- Throws:
java.io.IOException
-
writeLong
public void writeLong(long v) throws java.io.IOException- Throws:
java.io.IOException
-
writeShort
public void writeShort(int v) throws java.io.IOException- Throws:
java.io.IOException
-
writeUTF
public void writeUTF(java.lang.String str) throws java.io.IOException- Throws:
java.io.IOException
-