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.

    Fields inherited from class loci.common.AbstractNIOHandle

    EOF_ERROR_MSG
  • 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)
    A long variant of DataInput.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)  

    Methods inherited from class loci.common.AbstractNIOHandle

    exists, validateLength, validateMode

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • defaultBufferSize

      protected static int defaultBufferSize
      Default NIO buffer size to facilitate buffered I/O.
    • defaultRWBufferSize

      protected static int defaultRWBufferSize
      Default NIO buffer size to facilitate buffered I/O for read/write streams.
    • raf

      protected java.io.RandomAccessFile raf
      The random access file object backing this FileHandle.
    • channel

      protected java.nio.channels.FileChannel channel
      The file channel backed by the random access file.
    • position

      protected long position
      The absolute position within the file.
    • bufferStartPosition

      protected long bufferStartPosition
      The absolute position of the start of the buffer.
    • bufferSize

      protected int bufferSize
      The buffer size.
    • buffer

      protected java.nio.ByteBuffer buffer
      The buffer itself.
    • isReadWrite

      protected boolean isReadWrite
      Whether or not the file is opened read/write.
    • mapMode

      protected java.nio.channels.FileChannel.MapMode mapMode
      The default map mode for the file.
    • order

      protected java.nio.ByteOrder order
      The buffer's byte ordering.
    • byteBufferProvider

      protected NIOByteBufferProvider 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.IOException
      Creates a random access file stream to read from, and optionally to write to, the file specified by the File argument.
      Parameters:
      file - a File representing a file on disk
      mode - the access mode; r (read only) and rw (read/write) are supported
      bufferSize - 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.IOException
      Creates a random access file stream to read from, and optionally to write to, the file specified by the File argument.
      Parameters:
      file - a File representing a file on disk
      mode - the access mode; r (read only) and rw (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.IOException
      Creates 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 disk
      mode - the access mode; r (read only) and rw (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.IOException
      Description copied from class: AbstractNIOHandle
      Sets the new length of the handle.
      Specified by:
      setLength in class AbstractNIOHandle
      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.IOException
      Description 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.IOException
      Description 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.IOException
      Description 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.IOException
      Description 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 stream
      off - the offset in b from which to start filling; expected to be non-negative and no greater than b.length - len
      len - the number of bytes to read; expected to be positive and no greater than b.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.IOException
      Description 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.IOException
      Description 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 stream
      off - the offset in b from which to start filling; expected to be non-negative and no greater than buffer.capacity() - len
      len - the number of bytes to read; expected to be positive and no greater than buffer.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.IOException
      Description 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 - if pos 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.IOException
      Description copied from interface: IRandomAccess
      A long variant of DataInput.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.IOException
      Description 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.IOException
      Description 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 stream
      off - the offset in b from which to start writing; expected to be non-negative and no greater than buf.capacity() - len
      len - the number of bytes to write; expected to be positive and no greater than buf.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