Class RandomAccessFile

  • All Implemented Interfaces:
    Closeable, DataInput, DataOutput, AutoCloseable, ucar.nc2.internal.cache.FileCacheable
    Direct Known Subclasses:
    InMemoryRandomAccessFile, RemoteRandomAccessFile

    @NotThreadSafe
    public class RandomAccessFile
    extends Object
    implements DataInput, DataOutput, ucar.nc2.internal.cache.FileCacheable, Closeable
    A drop-in replacement for java.io.RandomAccessFile with extensions. Mutable.
    • Buffered I/O: instances of this class realise substantial speed increases over * java.io.RandomAccessFile through the use of buffering.
    • Read String methods support user-specified Charsets (default UTF-8).
    • Support for both big and little endiannness on reads and write: users may specify the byte order for I/O operations.

    By Russ Rew, based on BufferedRandomAccessFile by Alex McManus, based on Sun's source code for java.io.RandomAccessFile. For Alex McManus version from which this derives, see his Freeware Java Classes.

    Mutable, must be thread confined - that is, can only be used by a single thread at a time.

    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      static RandomAccessFile acquire​(String location)  
      static RandomAccessFile acquire​(String location, int buffer_size)  
      void close()
      Close the file, and release any associated system resources.
      static void eject​(String location)  
      static void enableDefaultGlobalFileCache()  
      void flush()
      Copy the contents of the buffer to the disk.
      int getBufferSize()
      Get the buffer size
      long getFilePointer()
      Returns the current position in the file, where the next read or write will occur.
      static ucar.nc2.internal.cache.FileCacheIF getGlobalFileCache()  
      long getLastModified()  
      String getLocation()
      Get the file location, or name.
      RandomAccessFile getRandomAccessFile()
      Allow access to the underlying java.io.RandomAccessFile.
      boolean isAtEndOfFile()
      Return true if file pointer is at end of file.
      long length()
      Get the length of the file.
      void order​(int endian)
      Change the current endian mode.
      void order​(ByteOrder bo)  
      void reacquire()  
      int read()
      Read a byte of data from the file, blocking until data is available.
      int read​(byte[] b)
      Read up to b.length( ) bytes into an array.
      int read​(byte[] b, int off, int len)
      Read up to len bytes into an array, at a specified offset.
      boolean readBoolean()
      Reads a boolean from this file.
      byte readByte()
      Reads a signed 8-bit value from this file.
      int readBytes​(byte[] b, int off, int len)
      Read up to len bytes into an array, at a specified offset.
      byte[] readBytes​(int count)
      Read fully count number of bytes
      char readChar()
      Reads a Unicode character from this file.
      double readDouble()
      Reads a double from this file.
      void readDouble​(double[] pa, int start, int n)
      Read an array of doubles
      float readFloat()
      Reads a float from this file.
      void readFloat​(float[] pa, int start, int n)
      Read an array of floats
      void readFully​(byte[] b)
      Reads b.length bytes from this file into the byte array.
      void readFully​(byte[] b, int off, int len)
      Reads exactly len bytes from this file into the byte array.
      int readInt()
      Reads a signed 32-bit integer from this file.
      void readInt​(int[] pa, int start, int n)
      Read an array of ints
      int readIntUnbuffered​(long pos)
      Read an integer at the given position, bypassing all buffering.
      String readLine()
      Reads the next line of text from this file.
      String readLine​(Charset charset)
      Read the next line of text as the specified charset The charset parameter is an extension not implemented in java.io.RandomAccessFile.
      long readLong()
      Reads a signed 64-bit integer from this file.
      void readLong​(long[] pa, int start, int n)
      Read an array of longs
      short readShort()
      Reads a signed 16-bit number from this file.
      void readShort​(short[] pa, int start, int n)
      Read an array of shorts
      String readString​(int nbytes)
      Read a String of known length.
      String readString​(int nbytes, Charset charset)
      Read a String of known length as the specified charset.
      String readStringMax​(int nbytes)
      Read a String of max length, zero terminate.
      String readStringMax​(int nbytes, Charset charset)
      Read a String of max length as the specified charset, zero terminate.
      long readToByteChannel​(WritableByteChannel dest, long offset, long nbytes)
      Read nbytes bytes, at the specified file offset, send to a WritableByteChannel.
      int readUnsignedByte()
      Reads an unsigned 8-bit number from this file.
      int readUnsignedShort()
      Reads an unsigned 16-bit number from this file.
      String readUTF()
      Reads in a string from this file.
      void release()  
      boolean searchForward​(KMPMatch match, int maxBytes)
      Search forward from the current pos, looking for a match.
      void seek​(long pos)
      Set the position in the file for the next read or write.
      void setBufferSize​(int bufferSize)
      Set the buffer size.
      void setExtendMode()
      Set extendMode for truncated, yet valid files - old NetCDF code allowed this when NOFILL on, and user doesnt write all variables.
      void setFileCache​(ucar.nc2.internal.cache.FileCacheIF fileCache)  
      static void setGlobalFileCache​(ucar.nc2.internal.cache.FileCacheIF _cache)  
      void setMinLength​(long minLength)
      Make sure file is at least this long when its closed.
      static void shutdown()  
      int skipBytes​(int n)
      Skips exactly n bytes of input.
      long skipBytes​(long n)  
      String toString()
      Create a string representation of this object.
      void unread()
      Unread the last byte read.
      void write​(byte[] b)
      Writes b.length bytes from the specified byte array starting at offset off to this file.
      void write​(byte[] b, int off, int len)
      Writes len bytes from the specified byte array starting at offset off to this file.
      void write​(int b)
      Write a byte to the file.
      void writeBoolean​(boolean v)
      Writes a boolean to the file as a 1-byte value.
      void writeBoolean​(boolean[] pa, int start, int n)
      Write an array of booleans
      void writeByte​(int v)
      Writes a byte to the file as a 1-byte value.
      void writeBytes​(byte[] b, int off, int len)
      Write len bytes from an array to the file.
      void writeBytes​(char[] b, int off, int len)
      Writes the character array to the file as a sequence of bytes.
      void writeBytes​(String s)
      Writes the string to the file as a sequence of bytes.
      void writeChar​(char[] pa, int start, int n)
      Write an array of chars
      void writeChar​(char[] pa, int start, int n, int endian)
      Write an array of chars with the provided endianness.
      void writeChar​(char[] pa, int start, int n, ByteOrder bo)
      Write an array of chars with the provided byte order.
      void writeChar​(int v)
      Writes a char to the file as a 2-byte value, high byte first.
      void writeChar​(int v, int endian)
      Writes a char to the file as a 2-byte value with the provided endianness.
      void writeChar​(int v, ByteOrder bo)
      Writes a char to the file as a 2-byte value with the provided byte order.
      void writeChars​(String s)
      Writes a string to the file as a sequence of characters.
      void writeChars​(String s, int endian)
      Writes a string to the file as a sequence of characters.
      void writeChars​(String s, ByteOrder bo)
      Writes a string to the file as a sequence of characters.
      void writeDouble​(double v)
      Converts the double argument to a long using the doubleToLongBits method in class Double, and then writes that long value to the file as an 8-byte quantity, high byte first.
      void writeDouble​(double[] pa, int start, int n)
      Write an array of doubles
      void writeDouble​(double[] pa, int start, int n, int endian)
      Write an array of doubles with the provided endianness.
      void writeDouble​(double[] pa, int start, int n, ByteOrder bo)
      Write an array of doubles with the provided byte order.
      void writeDouble​(double v, int endian)
      Converts the double argument to a long using the doubleToLongBits method in class Double, and then writes that long value to the file as an 8-byte quantity, with the provided endianness.
      void writeDouble​(double v, ByteOrder bo)
      Converts the double argument to a long using the doubleToLongBits method in class Double, and then writes that long value to the file as an 8-byte quantity, with the provided byte order.
      void writeFloat​(float v)
      Converts the float argument to an int using the floatToIntBits method in class Float, and then writes that int value to the file as a 4-byte quantity, high byte first.
      void writeFloat​(float[] pa, int start, int n)
      Write an array of floats
      void writeFloat​(float[] pa, int start, int n, int endian)
      Write an array of floats with the provided endianness.
      void writeFloat​(float[] pa, int start, int n, ByteOrder bo)
      Write an array of floats with the provided byte order.
      void writeFloat​(float v, int endian)
      Converts the float argument to an int using the floatToIntBits method in class Float, and then writes that int value to the file as a 4-byte quantity, with the provided endianness.
      void writeFloat​(float v, ByteOrder bo)
      Converts the float argument to an int using the floatToIntBits method in class Float, and then writes that int value to the file as a 4-byte quantity, with the provided byte order.
      void writeInt​(int v)
      Writes an int to the file as four bytes, high byte first.
      void writeInt​(int[] pa, int start, int n)
      Write an array of ints
      void writeInt​(int[] pa, int start, int n, int endian)
      Write an array of ints with the provided endianness.
      void writeInt​(int[] pa, int start, int n, ByteOrder bo)
      Write an array of ints with the provided byte order.
      void writeInt​(int v, int endian)
      Writes an int to the file as four bytes with the provided endianness.
      void writeInt​(int v, ByteOrder bo)
      Writes an int to the file as four bytes with the provided byte order.
      void writeLong​(long v)
      Writes a long to the file as eight bytes, high byte first.
      void writeLong​(long[] pa, int start, int n)
      Write an array of longs
      void writeLong​(long[] pa, int start, int n, int endian)
      Write an array of longs with the provided endianness.
      void writeLong​(long[] pa, int start, int n, ByteOrder bo)
      Write an array of longs with the provided byte order.
      void writeLong​(long v, int endian)
      Writes a long to the file as eight bytes with the provided endianness.
      void writeLong​(long v, ByteOrder bo)
      Writes a long to the file as eight bytes with the provided byte order.
      void writeShort​(int v)
      Writes a short to the file as two bytes, high byte first.
      void writeShort​(int v, int endian)
      Writes a short to the file as two bytes with the provided endianness.
      void writeShort​(int v, ByteOrder bo)
      Writes a short to the file as two bytes with the provided byte order.
      void writeShort​(short[] pa, int start, int n)
      Write an array of shorts
      void writeShort​(short[] pa, int start, int n, int endian)
      Write an array of shorts with the provided endianness.
      void writeShort​(short[] pa, int start, int n, ByteOrder bo)
      Write an array of shorts with the provided byte order.
      void writeUTF​(String str)
      Writes a string to the file using UTF-8 encoding in a machine-independent manner.
    • Constructor Detail

      • RandomAccessFile

        public RandomAccessFile​(String location,
                                String mode)
                         throws IOException
        Constructor, default buffer size.
        Parameters:
        location - location of the file
        mode - same as for java.io.RandomAccessFile, usually "r" or "rw"
        Throws:
        IOException - on open error
      • RandomAccessFile

        public RandomAccessFile​(String location,
                                String mode,
                                int bufferSize)
                         throws IOException
        Constructor.
        Parameters:
        location - location of the file
        mode - same as for java.io.RandomAccessFile
        bufferSize - size of buffer to use.
        Throws:
        IOException - on open error
    • Method Detail

      • enableDefaultGlobalFileCache

        public static void enableDefaultGlobalFileCache()
      • setGlobalFileCache

        public static void setGlobalFileCache​(ucar.nc2.internal.cache.FileCacheIF _cache)
      • getGlobalFileCache

        public static ucar.nc2.internal.cache.FileCacheIF getGlobalFileCache()
      • eject

        public static void eject​(String location)
      • shutdown

        public static void shutdown()
      • getRandomAccessFile

        public RandomAccessFile getRandomAccessFile()
        Allow access to the underlying java.io.RandomAccessFile. WARNING! BROKEN ENCAPSOLATION, DO NOT USE. May change implementation in the future.
        Returns:
        the underlying java.io.RandomAccessFile.
      • setBufferSize

        public void setBufferSize​(int bufferSize)
        Set the buffer size. If writing, call flush() first.
        Parameters:
        bufferSize - length in bytes
      • getBufferSize

        public int getBufferSize()
        Get the buffer size
        Returns:
        bufferSize length in bytes
      • close

        public void close()
                   throws IOException
        Close the file, and release any associated system resources.
        Specified by:
        close in interface AutoCloseable
        Specified by:
        close in interface Closeable
        Specified by:
        close in interface ucar.nc2.internal.cache.FileCacheable
        Throws:
        IOException - if an I/O error occurrs.
      • release

        public void release()
        Specified by:
        release in interface ucar.nc2.internal.cache.FileCacheable
      • reacquire

        public void reacquire()
        Specified by:
        reacquire in interface ucar.nc2.internal.cache.FileCacheable
      • setFileCache

        public void setFileCache​(ucar.nc2.internal.cache.FileCacheIF fileCache)
        Specified by:
        setFileCache in interface ucar.nc2.internal.cache.FileCacheable
      • getLastModified

        public long getLastModified()
        Specified by:
        getLastModified in interface ucar.nc2.internal.cache.FileCacheable
      • isAtEndOfFile

        public boolean isAtEndOfFile()
        Return true if file pointer is at end of file.
        Returns:
        true if file pointer is at end of file
      • seek

        public void seek​(long pos)
                  throws IOException
        Set the position in the file for the next read or write.
        Parameters:
        pos - the offset (in bytes) from the start of the file.
        Throws:
        IOException - if an I/O error occurrs.
      • getFilePointer

        public long getFilePointer()
        Returns the current position in the file, where the next read or write will occur.
        Returns:
        the offset from the start of the file in bytes.
      • getLocation

        public String getLocation()
        Get the file location, or name.
        Specified by:
        getLocation in interface ucar.nc2.internal.cache.FileCacheable
        Returns:
        file location
      • length

        public long length()
                    throws IOException
        Get the length of the file. The data in the buffer (which may not have been written the disk yet) is taken into account.
        Returns:
        the length of the file in bytes.
        Throws:
        IOException - if an I/O error occurrs.
      • order

        public void order​(int endian)
        Change the current endian mode. Subsequent reads of short, int, float, double, long, char will use this. Does not currently affect writes - ByteOrder must be explicitly specified on writes. Default values is BIG_ENDIAN. This method is an extension not implemented in java.io.RandomAccessFile.
        Parameters:
        endian - RandomAccessFile.BIG_ENDIAN or RandomAccessFile.LITTLE_ENDIAN
      • order

        public void order​(ByteOrder bo)
      • flush

        public void flush()
                   throws IOException
        Copy the contents of the buffer to the disk.
        Throws:
        IOException - if an I/O error occurs.
      • setMinLength

        public void setMinLength​(long minLength)
        Make sure file is at least this long when its closed. needed when not using fill mode, and not all data is written.
        Parameters:
        minLength - minimum length of the file.
      • setExtendMode

        public void setExtendMode()
        Set extendMode for truncated, yet valid files - old NetCDF code allowed this when NOFILL on, and user doesnt write all variables.
      • read

        public int read()
                 throws IOException
        Read a byte of data from the file, blocking until data is available.
        Returns:
        the next byte of data, or -1 if the end of the file is reached.
        Throws:
        IOException - if an I/O error occurrs.
      • readBytes

        public int readBytes​(byte[] b,
                             int off,
                             int len)
                      throws IOException
        Read up to len bytes into an array, at a specified offset. This will block until at least one byte has been read.
        Parameters:
        b - the byte array to receive the bytes.
        off - the offset in the array where copying will start.
        len - the number of bytes to copy.
        Returns:
        the actual number of bytes read, or -1 if there is not more data due to the end of the file being reached.
        Throws:
        IOException - if an I/O error occurrs.
      • readToByteChannel

        public long readToByteChannel​(WritableByteChannel dest,
                                      long offset,
                                      long nbytes)
                               throws IOException
        Read nbytes bytes, at the specified file offset, send to a WritableByteChannel. This will block until all bytes are read. This uses the underlying file channel directly, bypassing all user buffers.
        Parameters:
        dest - write to this WritableByteChannel.
        offset - the offset in the file where copying will start.
        nbytes - the number of bytes to read.
        Returns:
        the actual number of bytes read and transfered
        Throws:
        IOException - if an I/O error occurs.
      • read

        public int read​(byte[] b,
                        int off,
                        int len)
                 throws IOException
        Read up to len bytes into an array, at a specified offset. This will block until at least one byte has been read.
        Parameters:
        b - the byte array to receive the bytes.
        off - the offset in the array where copying will start.
        len - the number of bytes to copy.
        Returns:
        the actual number of bytes read, or -1 if there is not more data due to the end of the file being reached.
        Throws:
        IOException - if an I/O error occurrs.
      • read

        public int read​(byte[] b)
                 throws IOException
        Read up to b.length( ) bytes into an array. This will block until at least one byte has been read.
        Parameters:
        b - the byte array to receive the bytes.
        Returns:
        the actual number of bytes read, or -1 if there is not more data due to the end of the file being reached.
        Throws:
        IOException - if an I/O error occurrs.
      • readBytes

        public byte[] readBytes​(int count)
                         throws IOException
        Read fully count number of bytes
        Parameters:
        count - how many bytes tp read
        Returns:
        a byte array of length count, fully read in
        Throws:
        IOException - if an I/O error occurrs.
      • readFully

        public final void readFully​(byte[] b)
                             throws IOException
        Reads b.length bytes from this file into the byte array. This method reads repeatedly from the file until all the bytes are read. This method blocks until all the bytes are read, the end of the stream is detected, or an exception is thrown.
        Specified by:
        readFully in interface DataInput
        Parameters:
        b - the buffer into which the data is read.
        Throws:
        EOFException - if this file reaches the end before reading all the bytes.
        IOException - if an I/O error occurs.
      • readFully

        public final void readFully​(byte[] b,
                                    int off,
                                    int len)
                             throws IOException
        Reads exactly len bytes from this file into the byte array. This method reads repeatedly from the file until all the bytes are read. This method blocks until all the bytes are read, the end of the stream is detected, or an exception is thrown.
        Specified by:
        readFully in interface DataInput
        Parameters:
        b - the buffer into which the data is read.
        off - the start offset of the data.
        len - the number of bytes to read.
        Throws:
        EOFException - if this file reaches the end before reading all the bytes.
        IOException - if an I/O error occurs.
      • skipBytes

        public int skipBytes​(int n)
                      throws IOException
        Skips exactly n bytes of input. This method blocks until all the bytes are skipped, the end of the stream is detected, or an exception is thrown.
        Specified by:
        skipBytes in interface DataInput
        Parameters:
        n - the number of bytes to be skipped.
        Returns:
        the number of bytes skipped, which is always n.
        Throws:
        EOFException - if this file reaches the end before skipping all the bytes.
        IOException - if an I/O error occurs.
      • unread

        public void unread()
        Unread the last byte read. This method should not be used more than once between reading operations, or strange things might happen.
      • write

        public void write​(int b)
                   throws IOException
        Write a byte to the file. If the file has not been opened for writing, an IOException will be raised only when an attempt is made to write the buffer to the file.

        Caveat: the effects of seek( )ing beyond the end of the file are undefined.

        Specified by:
        write in interface DataOutput
        Parameters:
        b - write this byte
        Throws:
        IOException - if an I/O error occurrs.
      • writeBytes

        public void writeBytes​(byte[] b,
                               int off,
                               int len)
                        throws IOException
        Write len bytes from an array to the file.
        Parameters:
        b - the array containing the data.
        off - the offset in the array to the data.
        len - the length of the data.
        Throws:
        IOException - if an I/O error occurrs.
      • write

        public void write​(byte[] b)
                   throws IOException
        Writes b.length bytes from the specified byte array starting at offset off to this file.
        Specified by:
        write in interface DataOutput
        Parameters:
        b - the data.
        Throws:
        IOException - if an I/O error occurs.
      • write

        public void write​(byte[] b,
                          int off,
                          int len)
                   throws IOException
        Writes len bytes from the specified byte array starting at offset off to this file.
        Specified by:
        write in interface DataOutput
        Parameters:
        b - the data.
        off - the start offset in the data.
        len - the number of bytes to write.
        Throws:
        IOException - if an I/O error occurs.
      • readBoolean

        public final boolean readBoolean()
                                  throws IOException
        Reads a boolean from this file. This method reads a single byte from the file. A value of 0 represents false. Any other value represents true. This method blocks until the byte is read, the end of the stream is detected, or an exception is thrown.
        Specified by:
        readBoolean in interface DataInput
        Returns:
        the boolean value read.
        Throws:
        EOFException - if this file has reached the end.
        IOException - if an I/O error occurs.
      • readByte

        public final byte readByte()
                            throws IOException
        Reads a signed 8-bit value from this file. This method reads a byte from the file. If the byte read is b, where 0 <= b <= 255, then the result is:
          (byte)(b)

        This method blocks until the byte is read, the end of the stream is detected, or an exception is thrown.

        Specified by:
        readByte in interface DataInput
        Returns:
        the next byte of this file as a signed 8-bit byte.
        Throws:
        EOFException - if this file has reached the end.
        IOException - if an I/O error occurs.
      • readUnsignedByte

        public final int readUnsignedByte()
                                   throws IOException
        Reads an unsigned 8-bit number from this file. This method reads a byte from this file and returns that byte.

        This method blocks until the byte is read, the end of the stream is detected, or an exception is thrown.

        Specified by:
        readUnsignedByte in interface DataInput
        Returns:
        the next byte of this file, interpreted as an unsigned 8-bit number.
        Throws:
        EOFException - if this file has reached the end.
        IOException - if an I/O error occurs.
      • readShort

        public final short readShort()
                              throws IOException
        Reads a signed 16-bit number from this file. The method reads 2 bytes from this file. If the two bytes read, in order, are b1 and b2, where each of the two values is between 0 and 255, inclusive, then the result is equal to:
          (short)((b1 << 8) | b2)

        This method blocks until the two bytes are read, the end of the stream is detected, or an exception is thrown.

        Specified by:
        readShort in interface DataInput
        Returns:
        the next two bytes of this file, interpreted as a signed 16-bit number.
        Throws:
        EOFException - if this file reaches the end before reading two bytes.
        IOException - if an I/O error occurs.
      • readShort

        public final void readShort​(short[] pa,
                                    int start,
                                    int n)
                             throws IOException
        Read an array of shorts
        Parameters:
        pa - read into this array
        start - starting at pa[start]
        n - read this many elements
        Throws:
        IOException - on read error
      • readUnsignedShort

        public final int readUnsignedShort()
                                    throws IOException
        Reads an unsigned 16-bit number from this file. This method reads two bytes from the file. If the bytes read, in order, are b1 and b2, where 0 <= b1, b2 <= 255, then the result is equal to:
          (b1 << 8) | b2

        This method blocks until the two bytes are read, the end of the stream is detected, or an exception is thrown.

        Specified by:
        readUnsignedShort in interface DataInput
        Returns:
        the next two bytes of this file, interpreted as an unsigned 16-bit integer.
        Throws:
        EOFException - if this file reaches the end before reading two bytes.
        IOException - if an I/O error occurs.
      • readChar

        public final char readChar()
                            throws IOException
        Reads a Unicode character from this file. This method reads two bytes from the file. If the bytes read, in order, are b1 and b2, where 0 <= b1, b2 <= 255, then the result is equal to:
          (char)((b1 << 8) | b2)

        This method blocks until the two bytes are read, the end of the stream is detected, or an exception is thrown.

        Specified by:
        readChar in interface DataInput
        Returns:
        the next two bytes of this file as a Unicode character.
        Throws:
        EOFException - if this file reaches the end before reading two bytes.
        IOException - if an I/O error occurs.
      • readInt

        public final int readInt()
                          throws IOException
        Reads a signed 32-bit integer from this file. This method reads 4 bytes from the file. If the bytes read, in order, are b1, b2, b3, and b4, where 0 <= b1, b2, b3, b4 <= 255, then the result is equal to:
          (b1 << 24) | (b2 << 16) + (b3 << 8) + b4

        This method blocks until the four bytes are read, the end of the stream is detected, or an exception is thrown.

        Specified by:
        readInt in interface DataInput
        Returns:
        the next four bytes of this file, interpreted as an int.
        Throws:
        EOFException - if this file reaches the end before reading four bytes.
        IOException - if an I/O error occurs.
      • readIntUnbuffered

        public final int readIntUnbuffered​(long pos)
                                    throws IOException
        Read an integer at the given position, bypassing all buffering.
        Parameters:
        pos - read a byte at this position
        Returns:
        The int that was read
        Throws:
        IOException - if an I/O error occurs.
      • readInt

        public final void readInt​(int[] pa,
                                  int start,
                                  int n)
                           throws IOException
        Read an array of ints
        Parameters:
        pa - read into this array
        start - starting at pa[start]
        n - read this many elements
        Throws:
        IOException - on read error
      • readLong

        public final long readLong()
                            throws IOException
        Reads a signed 64-bit integer from this file. This method reads eight bytes from the file. If the bytes read, in order, are b1, b2, b3, b4, b5, b6, b7, and b8, where:
          0 <= b1, b2, b3, b4, b5, b6, b7, b8 <=255,

        then the result is equal to:

         ((long) b1 << 56) + ((long) b2 << 48) + ((long) b3 << 40) + ((long) b4 << 32) + ((long) b5 << 24)
             + ((long) b6 << 16) + ((long) b7 << 8) + b8
         

        This method blocks until the eight bytes are read, the end of the stream is detected, or an exception is thrown.

        Specified by:
        readLong in interface DataInput
        Returns:
        the next eight bytes of this file, interpreted as a long.
        Throws:
        EOFException - if this file reaches the end before reading eight bytes.
        IOException - if an I/O error occurs.
      • readLong

        public final void readLong​(long[] pa,
                                   int start,
                                   int n)
                            throws IOException
        Read an array of longs
        Parameters:
        pa - read into this array
        start - starting at pa[start]
        n - read this many elements
        Throws:
        IOException - on read error
      • readFloat

        public final float readFloat()
                              throws IOException
        Reads a float from this file. This method reads an int value as if by the readInt method and then converts that int to a float using the intBitsToFloat method in class Float.

        This method blocks until the four bytes are read, the end of the stream is detected, or an exception is thrown.

        Specified by:
        readFloat in interface DataInput
        Returns:
        the next four bytes of this file, interpreted as a float.
        Throws:
        EOFException - if this file reaches the end before reading four bytes.
        IOException - if an I/O error occurs.
        See Also:
        RandomAccessFile.readInt(), Float.intBitsToFloat(int)
      • readFloat

        public final void readFloat​(float[] pa,
                                    int start,
                                    int n)
                             throws IOException
        Read an array of floats
        Parameters:
        pa - read into this array
        start - starting at pa[start]
        n - read this many elements
        Throws:
        IOException - on read error
      • readDouble

        public final double readDouble()
                                throws IOException
        Reads a double from this file. This method reads a long value as if by the readLong method and then converts that long to a double using the longBitsToDouble method in class Double.

        This method blocks until the eight bytes are read, the end of the stream is detected, or an exception is thrown.

        Specified by:
        readDouble in interface DataInput
        Returns:
        the next eight bytes of this file, interpreted as a double.
        Throws:
        EOFException - if this file reaches the end before reading eight bytes.
        IOException - if an I/O error occurs.
        See Also:
        RandomAccessFile.readLong(), Double.longBitsToDouble(long)
      • readDouble

        public final void readDouble​(double[] pa,
                                     int start,
                                     int n)
                              throws IOException
        Read an array of doubles
        Parameters:
        pa - read into this array
        start - starting at pa[start]
        n - read this many elements
        Throws:
        IOException - on read error
      • readLine

        public final String readLine()
                              throws IOException
        Reads the next line of text from this file. This method successively reads bytes from the file, starting at the current file pointer, until it reaches a line terminator or the end of the file. Each byte is converted into a character by taking the byte's value for the lower eight bits of the character and setting the high eight bits of the character to zero. This method does not, therefore, support the full Unicode character set.

        A line of text is terminated by a carriage-return character ('\r'), a newline character ('\n'), a carriage-return character immediately followed by a newline character, or the end of the file. Line-terminating characters are discarded and are not included as part of the string returned.

        This method blocks until a newline character is read, a carriage return and the byte following it are read (to see if it is a newline), the end of the file is reached, or an exception is thrown.

        Specified by:
        readLine in interface DataInput
        Returns:
        the next line of text from this file, or null if end of file is encountered before even one byte is read.
        Throws:
        IOException - if an I/O error occurs.
      • readLine

        public String readLine​(Charset charset)
                        throws IOException
        Read the next line of text as the specified charset The charset parameter is an extension not implemented in java.io.RandomAccessFile.
        Parameters:
        charset - - character encoding to use
        Throws:
        IOException
      • readUTF

        public final String readUTF()
                             throws IOException
        Reads in a string from this file. The string has been encoded using a modified UTF-8 format.

        The first two bytes are read as if by readUnsignedShort. This value gives the number of following bytes that are in the encoded string, not the length of the resulting string. The following bytes are then interpreted as bytes encoding characters in the UTF-8 format and are converted into characters.

        This method blocks until all the bytes are read, the end of the stream is detected, or an exception is thrown.

        Specified by:
        readUTF in interface DataInput
        Returns:
        a Unicode string.
        Throws:
        EOFException - if this file reaches the end before reading all the bytes.
        IOException - if an I/O error occurs.
        UTFDataFormatException - if the bytes do not represent valid UTF-8 encoding of a Unicode string.
        See Also:
        RandomAccessFile.readUnsignedShort()
      • readString

        public String readString​(int nbytes)
                          throws IOException
        Read a String of known length.
        Parameters:
        nbytes - number of bytes to read
        Returns:
        String wrapping the bytes.
        Throws:
        IOException - if an I/O error occurs.
      • readString

        public String readString​(int nbytes,
                                 Charset charset)
                          throws IOException
        Read a String of known length as the specified charset. The charset parameter is an extension not implemented in java.io.RandomAccessFile.
        Parameters:
        nbytes - number of bytes to reSad
        charset - the charset to be used to decode the bytes
        Returns:
        String wrapping the bytes.
        Throws:
        IOException - if an I/O error occurs.
      • readStringMax

        public String readStringMax​(int nbytes)
                             throws IOException
        Read a String of max length, zero terminate.
        Parameters:
        nbytes - number of bytes to read
        Returns:
        String wrapping the bytes.
        Throws:
        IOException - if an I/O error occurs.
      • readStringMax

        public String readStringMax​(int nbytes,
                                    Charset charset)
                             throws IOException
        Read a String of max length as the specified charset, zero terminate. The charset parameter is an extension not implemented in java.io.RandomAccessFile.
        Parameters:
        nbytes - number of bytes to read
        charset - the charset to be used to decode the bytes
        Returns:
        String wrapping the bytes.
        Throws:
        IOException - if an I/O error occurs.
      • writeBoolean

        public final void writeBoolean​(boolean v)
                                throws IOException
        Writes a boolean to the file as a 1-byte value. The value true is written out as the value (byte)1; the value false is written out as the value (byte)0.
        Specified by:
        writeBoolean in interface DataOutput
        Parameters:
        v - a boolean value to be written.
        Throws:
        IOException - if an I/O error occurs.
      • writeBoolean

        public final void writeBoolean​(boolean[] pa,
                                       int start,
                                       int n)
                                throws IOException
        Write an array of booleans
        Parameters:
        pa - write from this array
        start - starting with this element in the array
        n - write this number of elements
        Throws:
        IOException - on read error
      • writeByte

        public final void writeByte​(int v)
                             throws IOException
        Writes a byte to the file as a 1-byte value.
        Specified by:
        writeByte in interface DataOutput
        Parameters:
        v - a byte value to be written.
        Throws:
        IOException - if an I/O error occurs.
      • writeShort

        public final void writeShort​(int v)
                              throws IOException
        Writes a short to the file as two bytes, high byte first.
        Specified by:
        writeShort in interface DataOutput
        Parameters:
        v - a short to be written.
        Throws:
        IOException - if an I/O error occurs.
      • writeShort

        public final void writeShort​(int v,
                                     int endian)
                              throws IOException
        Writes a short to the file as two bytes with the provided endianness. The endian parameter is an extension not implemented in java.io.RandomAccessFile.
        Parameters:
        v - a short to be written.
        endian - Endianness of the file as an int (0 = big endian, 1 = little endian)
        Throws:
        IOException - if an I/O error occurs.
      • writeShort

        public void writeShort​(int v,
                               ByteOrder bo)
                        throws IOException
        Writes a short to the file as two bytes with the provided byte order. The byte order parameter is an extension not implemented in java.io.RandomAccessFile.
        Parameters:
        v - a short to be written.
        bo - Endianness of the file as a ByteOrder
        Throws:
        IOException - if an I/O error occurs.
      • writeShort

        public final void writeShort​(short[] pa,
                                     int start,
                                     int n)
                              throws IOException
        Write an array of shorts
        Parameters:
        pa - write from this array
        start - starting with this element in the array
        n - this number of elements
        Throws:
        IOException - on read error
      • writeShort

        public final void writeShort​(short[] pa,
                                     int start,
                                     int n,
                                     int endian)
                              throws IOException
        Write an array of shorts with the provided endianness. The endian parameter is an extension not implemented in java.io.RandomAccessFile.
        Parameters:
        pa - write from this array
        start - starting with this element in the array
        n - this number of elements
        endian - Endianness of the file as an int (0 = big endian, 1 = little endian)
        Throws:
        IOException - on read error
      • writeShort

        public final void writeShort​(short[] pa,
                                     int start,
                                     int n,
                                     ByteOrder bo)
                              throws IOException
        Write an array of shorts with the provided byte order. The byte order parameter is an extension not implemented in java.io.RandomAccessFile.
        Parameters:
        pa - write from this array
        start - starting with this element in the array
        n - this number of elements
        bo - Endianness of the file as a ByteOrder
        Throws:
        IOException - on read error
      • writeChar

        public final void writeChar​(int v)
                             throws IOException
        Writes a char to the file as a 2-byte value, high byte first.
        Specified by:
        writeChar in interface DataOutput
        Parameters:
        v - a char value to be written.
        Throws:
        IOException - if an I/O error occurs.
      • writeChar

        public void writeChar​(int v,
                              int endian)
                       throws IOException
        Writes a char to the file as a 2-byte value with the provided endianness. The endian parameter is an extension not implemented in java.io.RandomAccessFile.
        Parameters:
        v - a char value to be written.
        endian - Endianness of the file as an int (0 = big endian, 1 = little endian)
        Throws:
        IOException - if an I/O error occurs.
      • writeChar

        public void writeChar​(int v,
                              ByteOrder bo)
                       throws IOException
        Writes a char to the file as a 2-byte value with the provided byte order. The byte order parameter is an extension not implemented in java.io.RandomAccessFile.
        Parameters:
        v - a char value to be written.
        bo - Endianness of the file as a ByteOrder
        Throws:
        IOException - if an I/O error occurs.
      • writeChar

        public final void writeChar​(char[] pa,
                                    int start,
                                    int n)
                             throws IOException
        Write an array of chars
        Parameters:
        pa - write from this array
        start - starting with this element in the array
        n - this number of elements
        Throws:
        IOException - on read error
      • writeChar

        public final void writeChar​(char[] pa,
                                    int start,
                                    int n,
                                    int endian)
                             throws IOException
        Write an array of chars with the provided endianness. The endian parameter is an extension not implemented in java.io.RandomAccessFile.
        Parameters:
        pa - write from this array
        start - starting with this element in the array
        n - this number of elements
        endian - Endianness of the file as an int (0 = big endian, 1 = little endian)
        Throws:
        IOException - on read error
      • writeChar

        public final void writeChar​(char[] pa,
                                    int start,
                                    int n,
                                    ByteOrder bo)
                             throws IOException
        Write an array of chars with the provided byte order. The byte order parameter is an extension not implemented in java.io.RandomAccessFile.
        Parameters:
        pa - write from this array
        start - starting with this element in the array
        n - this number of elements
        bo - Endianness of the file as a ByteOrder
        Throws:
        IOException - on read error
      • writeInt

        public final void writeInt​(int v)
                            throws IOException
        Writes an int to the file as four bytes, high byte first.
        Specified by:
        writeInt in interface DataOutput
        Parameters:
        v - an int to be written.
        Throws:
        IOException - if an I/O error occurs.
      • writeInt

        public final void writeInt​(int v,
                                   int endian)
                            throws IOException
        Writes an int to the file as four bytes with the provided endianness. The endian parameter is an extension not implemented in java.io.RandomAccessFile.
        Parameters:
        v - an int to be written.
        endian - Endianness of the file as an int (0 = big endian, 1 = little endian)
        Throws:
        IOException - if an I/O error occurs.
      • writeInt

        public final void writeInt​(int v,
                                   ByteOrder bo)
                            throws IOException
        Writes an int to the file as four bytes with the provided byte order. The byte order parameter is an extension not implemented in java.io.RandomAccessFile.
        Parameters:
        v - an int to be written.
        bo - Endianness of the file as a ByteOrder
        Throws:
        IOException - if an I/O error occurs.
      • writeInt

        public final void writeInt​(int[] pa,
                                   int start,
                                   int n)
                            throws IOException
        Write an array of ints
        Parameters:
        pa - write from this array
        start - starting with this element in the array
        n - write this number of elements
        Throws:
        IOException - on read error
      • writeInt

        public final void writeInt​(int[] pa,
                                   int start,
                                   int n,
                                   int endian)
                            throws IOException
        Write an array of ints with the provided endianness. The endian parameter is an extension not implemented in java.io.RandomAccessFile.
        Parameters:
        pa - write from this array
        start - starting with this element in the array
        n - write this number of elements
        endian - Endianness of the file as an int (0 = big endian, 1 = little endian)
        Throws:
        IOException - on read error
      • writeInt

        public final void writeInt​(int[] pa,
                                   int start,
                                   int n,
                                   ByteOrder bo)
                            throws IOException
        Write an array of ints with the provided byte order. The byte order parameter is an extension not implemented in java.io.RandomAccessFile.
        Parameters:
        pa - write from this array
        start - starting with this element in the array
        n - write this number of elements
        bo - Endianness of the file as a ByteOrder
        Throws:
        IOException - on read error
      • writeLong

        public final void writeLong​(long v)
                             throws IOException
        Writes a long to the file as eight bytes, high byte first.
        Specified by:
        writeLong in interface DataOutput
        Parameters:
        v - a long to be written.
        Throws:
        IOException - if an I/O error occurs.
      • writeLong

        public final void writeLong​(long v,
                                    int endian)
                             throws IOException
        Writes a long to the file as eight bytes with the provided endianness. The endian parameter is an extension not implemented in java.io.RandomAccessFile.
        Parameters:
        v - a long to be written.
        endian - Endianness of the file as an int (0 = big endian, 1 = little endian)
        Throws:
        IOException - if an I/O error occurs.
      • writeLong

        public final void writeLong​(long v,
                                    ByteOrder bo)
                             throws IOException
        Writes a long to the file as eight bytes with the provided byte order. The byte order parameter is an extension not implemented in java.io.RandomAccessFile.
        Parameters:
        v - a long to be written.
        bo - Endianness of the file as a ByteOrder
        Throws:
        IOException - if an I/O error occurs.
      • writeLong

        public final void writeLong​(long[] pa,
                                    int start,
                                    int n)
                             throws IOException
        Write an array of longs
        Parameters:
        pa - write from this array
        start - starting with this element in the array
        n - write this number of elements
        Throws:
        IOException - on read error
      • writeLong

        public final void writeLong​(long[] pa,
                                    int start,
                                    int n,
                                    int endian)
                             throws IOException
        Write an array of longs with the provided endianness. The endian parameter is an extension not implemented in java.io.RandomAccessFile.
        Parameters:
        pa - write from this array
        start - starting with this element in the array
        n - write this number of elements
        endian - Endianness of the file as an int (0 = big endian, 1 = little endian)
        Throws:
        IOException - on read error
      • writeLong

        public final void writeLong​(long[] pa,
                                    int start,
                                    int n,
                                    ByteOrder bo)
                             throws IOException
        Write an array of longs with the provided byte order. The byte order parameter is an extension not implemented in java.io.RandomAccessFile.
        Parameters:
        pa - write from this array
        start - starting with this element in the array
        n - write this number of elements
        bo - Endianness of the file as a ByteOrder
        Throws:
        IOException - on read error
      • writeFloat

        public final void writeFloat​(float v)
                              throws IOException
        Converts the float argument to an int using the floatToIntBits method in class Float, and then writes that int value to the file as a 4-byte quantity, high byte first.
        Specified by:
        writeFloat in interface DataOutput
        Parameters:
        v - a float value to be written.
        Throws:
        IOException - if an I/O error occurs.
        See Also:
        Float.floatToIntBits(float)
      • writeFloat

        public final void writeFloat​(float v,
                                     int endian)
                              throws IOException
        Converts the float argument to an int using the floatToIntBits method in class Float, and then writes that int value to the file as a 4-byte quantity, with the provided endianness. The endian parameter is an extension not implemented in java.io.RandomAccessFile.
        Parameters:
        v - a float value to be written.
        endian - Endianness of the file as an int (0 = big endian, 1 = little endian)
        Throws:
        IOException - if an I/O error occurs.
        See Also:
        Float.floatToIntBits(float)
      • writeFloat

        public final void writeFloat​(float v,
                                     ByteOrder bo)
                              throws IOException
        Converts the float argument to an int using the floatToIntBits method in class Float, and then writes that int value to the file as a 4-byte quantity, with the provided byte order. The byte order parameter is an extension not implemented in java.io.RandomAccessFile.
        Parameters:
        v - a float value to be written.
        bo - Endianness of the file as a ByteOrder
        Throws:
        IOException - if an I/O error occurs.
        See Also:
        Float.floatToIntBits(float)
      • writeFloat

        public final void writeFloat​(float[] pa,
                                     int start,
                                     int n)
                              throws IOException
        Write an array of floats
        Parameters:
        pa - write from this array
        start - starting with this element in the array
        n - write this number of elements
        Throws:
        IOException - on read error
      • writeFloat

        public final void writeFloat​(float[] pa,
                                     int start,
                                     int n,
                                     int endian)
                              throws IOException
        Write an array of floats with the provided endianness. The endian parameter is an extension not implemented in java.io.RandomAccessFile.
        Parameters:
        pa - write from this array
        start - starting with this element in the array
        n - write this number of elements
        endian - Endianness of the file as an int (0 = big endian, 1 = little endian)
        Throws:
        IOException - on read error
      • writeFloat

        public final void writeFloat​(float[] pa,
                                     int start,
                                     int n,
                                     ByteOrder bo)
                              throws IOException
        Write an array of floats with the provided byte order. The byte order parameter is an extension not implemented in java.io.RandomAccessFile.
        Parameters:
        pa - write from this array
        start - starting with this element in the array
        n - write this number of elements
        bo - Endianness of the file as a ByteOrder
        Throws:
        IOException - on read error
      • writeDouble

        public final void writeDouble​(double v)
                               throws IOException
        Converts the double argument to a long using the doubleToLongBits method in class Double, and then writes that long value to the file as an 8-byte quantity, high byte first.
        Specified by:
        writeDouble in interface DataOutput
        Parameters:
        v - a double value to be written.
        Throws:
        IOException - if an I/O error occurs.
        See Also:
        Double.doubleToLongBits(double)
      • writeDouble

        public final void writeDouble​(double v,
                                      int endian)
                               throws IOException
        Converts the double argument to a long using the doubleToLongBits method in class Double, and then writes that long value to the file as an 8-byte quantity, with the provided endianness. The endian parameter is an extension not implemented in java.io.RandomAccessFile.
        Parameters:
        v - a double value to be written.
        endian - Endianness of the file as an int (0 = big endian, 1 = little endian)
        Throws:
        IOException - if an I/O error occurs.
        See Also:
        Double.doubleToLongBits(double)
      • writeDouble

        public final void writeDouble​(double v,
                                      ByteOrder bo)
                               throws IOException
        Converts the double argument to a long using the doubleToLongBits method in class Double, and then writes that long value to the file as an 8-byte quantity, with the provided byte order. The byte order parameter is an extension not implemented in java.io.RandomAccessFile.
        Parameters:
        v - a double value to be written.
        bo - Endianness of the file as a ByteOrder
        Throws:
        IOException - if an I/O error occurs.
        See Also:
        Double.doubleToLongBits(double)
      • writeDouble

        public final void writeDouble​(double[] pa,
                                      int start,
                                      int n)
                               throws IOException
        Write an array of doubles
        Parameters:
        pa - write from this array
        start - starting with this element in the array
        n - write this number of elements
        Throws:
        IOException - on read error
      • writeDouble

        public final void writeDouble​(double[] pa,
                                      int start,
                                      int n,
                                      int endian)
                               throws IOException
        Write an array of doubles with the provided endianness. The endian parameter is an extension not implemented in java.io.RandomAccessFile.
        Parameters:
        pa - write from this array
        start - starting with this element in the array
        n - write this number of elements
        endian - Endianness of the file as an int (0 = big endian, 1 = little endian)
        Throws:
        IOException - on read error
      • writeDouble

        public final void writeDouble​(double[] pa,
                                      int start,
                                      int n,
                                      ByteOrder bo)
                               throws IOException
        Write an array of doubles with the provided byte order. The byte order parameter is an extension not implemented in java.io.RandomAccessFile.
        Parameters:
        pa - write from this array
        start - starting with this element in the array
        n - write this number of elements
        bo - Endianness of the file as a ByteOrder
        Throws:
        IOException - on read error
      • writeBytes

        public final void writeBytes​(String s)
                              throws IOException
        Writes the string to the file as a sequence of bytes. Each character in the string is written out, in sequence, by discarding its high eight bits.
        Specified by:
        writeBytes in interface DataOutput
        Parameters:
        s - a string of bytes to be written.
        Throws:
        IOException - if an I/O error occurs.
      • writeBytes

        public final void writeBytes​(char[] b,
                                     int off,
                                     int len)
                              throws IOException
        Writes the character array to the file as a sequence of bytes. Each character in the string is written out, in sequence, by discarding its high eight bits.
        Parameters:
        b - a character array of bytes to be written.
        off - the index of the first character to write.
        len - the number of characters to write.
        Throws:
        IOException - if an I/O error occurs.
      • writeChars

        public final void writeChars​(String s)
                              throws IOException
        Writes a string to the file as a sequence of characters. Each character is written to the data output stream as if by the writeChar method.
        Specified by:
        writeChars in interface DataOutput
        Parameters:
        s - a String value to be written.
        Throws:
        IOException - if an I/O error occurs.
        See Also:
        RandomAccessFile.writeChar(int)
      • writeChars

        public void writeChars​(String s,
                               int endian)
                        throws IOException
        Writes a string to the file as a sequence of characters. Each character is written to the data output stream as if by the writeChar method, with the provided endianness. The endian parameter is an extension not implemented in java.io.RandomAccessFile.
        Parameters:
        s - a String value to be written.
        endian - Endianness of the file as an int (0 = big endian, 1 = little endian)
        Throws:
        IOException - if an I/O error occurs.
        See Also:
        RandomAccessFile.writeChar(int)
      • writeChars

        public void writeChars​(String s,
                               ByteOrder bo)
                        throws IOException
        Writes a string to the file as a sequence of characters. Each character is written to the data output stream as if by the writeChar method, with the provided byte order. The byte order parameter is an extension not implemented in java.io.RandomAccessFile.
        Parameters:
        s - a String value to be written.
        bo - Endianness of the file as a ByteOrder
        Throws:
        IOException - if an I/O error occurs.
        See Also:
        RandomAccessFile.writeChar(int)
      • writeUTF

        public final void writeUTF​(String str)
                            throws IOException
        Writes a string to the file using UTF-8 encoding in a machine-independent manner.

        First, two bytes are written to the file as if by the writeShort method giving the number of bytes to follow. This value is the number of bytes actually written out, not the length of the string. Following the length, each character of the string is output, in sequence, using the UTF-8 encoding for each character.

        Specified by:
        writeUTF in interface DataOutput
        Parameters:
        str - a string to be written.
        Throws:
        IOException - if an I/O error occurs.
      • toString

        public String toString()
        Create a string representation of this object.
        Overrides:
        toString in class Object
        Returns:
        a string representation of the state of the object.
      • searchForward

        public boolean searchForward​(KMPMatch match,
                                     int maxBytes)
                              throws IOException
        Search forward from the current pos, looking for a match.
        Parameters:
        match - the match to look for.
        maxBytes - maximum number of bytes to search. use -1 for all
        Returns:
        true if found, file position will be at the start of the match.
        Throws:
        IOException - on read error