## ucar.netcdf
Class RandomAccessFile

    java.lang.Object
      ucar.netcdf.RandomAccessFile

All Implemented Interfaces:
  DataInput, DataOutput

Direct Known Subclasses:
  HTTPRandomAccessFile

public class RandomAccessFile
extends Object
implements DataInput, DataOutput

A buffered drop-in replacement for java.io.RandomAccessFile. Instances of this class realise substantial speed increases over java.io.RandomAccessFile through the use of buffering. This is a subclass of Object, as it was not possible to subclass java.io.RandomAccessFile because many of the methods are final. However, if it is necessary to use RandomAccessFile and java.io.RandomAccessFile interchangeably, both classes implement the DataInput and DataOutput interfaces.

See Also:
  `DataInput`, `DataOutput`, `RandomAccessFile`

Field Summary
`protected byte[]` `buffer` The buffer used to load the data.
`(package private) boolean` `bufferModified` True if the data in the buffer has been modified.
`protected long` `bufferStart` The offset in bytes of the start of the buffer, from the start of the file.
`static int` `CREATE` Create the file rather than overwriting it.
`protected long` `dataEnd` The offset in bytes of the end of the data in the buffer, from the start of the file.
`protected int` `dataSize` The size of the data stored in the buffer, in bytes.
`protected static int` `defaultBufferSize` The default buffer size, in bytes.
`protected boolean` `endOfFile` True if we are at the end of the file.
`protected RandomAccessFile` `file` The underlying java.io.RandomAccessFile.
`protected long` `filePosition` The offset in bytes from the file start, of the next read or write operation.
`protected int` `mode` The access mode of the file.
`static int` `READ` Read from the file.
`static int` `WRITE` Write to the file.

Constructor Summary
`` `RandomAccessFile(File file, String modeString)` Creates a random access file stream to read from, and optionally to write to, the file specified by the `File` argument.
`protected` `RandomAccessFile(int bufferSize)`
`` `RandomAccessFile(String filename, int mode)` Create a new buffered random-access file with a default buffer size.
`` `RandomAccessFile(String filename, int mode, int bufferSize)` Create a new buffered random-access file with a specified buffer size.
`` `RandomAccessFile(String filename, String modeString)` Creates a random access file stream to read from, and optionally to write to, a file with the specified name.
`` `RandomAccessFile(String filename, String modeString, int bufferSize)` Creates a random access file stream to read from, and optionally to write to, a file with the specified name.

Method Summary
`static void` `benchmark(String filename, int bufferSize)` Benchmark the performance of the new RandomAccessFile class.
`void` `close()` Close the file, and release any associated system resources.
`void` `flush()` Copy the contents of the buffer to the disk.
`FileDescriptor` `getFD()` Returns the opaque file descriptor object associated with this file.
`long` `getFilePointer()` Returns the current position in the file, where the next read or write will occur.
`long` `length()` Get the length of the file.
`static void` `main(String[] argv)` Test the RandomAccessFile class.
`protected int` `read_(long pos, byte[] b, int offset, int len)`
`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.
`char` `readChar()` Reads a Unicode character from this file.
`double` `readDouble()` Reads a `double` from this file.
`float` `readFloat()` Reads a `float` from this file.
`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.
`String` `readLine()` Reads the next line of text from this file.
`long` `readLong()` Reads a signed 64-bit integer from this file.
`short` `readShort()` Reads a signed 16-bit number from this file.
`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` `seek(long pos)` Set the position in the file for the next read or write.
`int` `skipBytes(int n)` Skips exactly `n` bytes of input.
`static void` `testBlocks(String filename)` Test the block operations of the RandomAccessFile class.
`static void` `testBytes(String filename, int bufferSize)` Test the byte operations of the RandomAccessFile class.
`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` `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(int v)` Writes a `char` to the file as a 2-byte value, high byte first.
`void` `writeChars(String s)` 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` `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` `writeInt(int v)` Writes an `int` to the file as four bytes, high byte first.
`void` `writeLong(long v)` Writes a `long` to the file as eight bytes, high byte first.
`void` `writeShort(int v)` Writes a `short` to the file as two bytes, high byte first.
`void` `writeUTF(String str)` Writes a string to the file using UTF-8 encoding in a machine-independent manner.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

Field Detail

### READ

    public static final int READ

  Read from the file. This is always implied.

  See Also:
    Constant Field Values

### WRITE

    public static final int WRITE

  Write to the file.

  See Also:
    Constant Field Values

### CREATE

    public static final int CREATE

  Create the file rather than overwriting it. This is ignored if mode is not also WRITE.

  See Also:
    Constant Field Values

### defaultBufferSize

    protected static final int defaultBufferSize

  The default buffer size, in bytes.

  See Also:
    Constant Field Values

### file

    protected RandomAccessFile file

  The underlying java.io.RandomAccessFile.

### filePosition

    protected long filePosition

  The offset in bytes from the file start, of the next read or write operation.

### buffer

    protected byte[] buffer

  The buffer used to load the data.

### bufferStart

    protected long bufferStart

  The offset in bytes of the start of the buffer, from the start of the file.

### dataEnd

    protected long dataEnd

  The offset in bytes of the end of the data in the buffer, from the start of the file. This can be calculated from `bufferStart + dataSize`, but it is cached to speed up the read( ) method.

### dataSize

    protected int dataSize

  The size of the data stored in the buffer, in bytes. This may be less than the size of the buffer.

### endOfFile

    protected boolean endOfFile

  True if we are at the end of the file.

### mode

    protected int mode

  The access mode of the file. This is a logical OR of READ, WRITE and CREATE.

### bufferModified

    boolean bufferModified

  True if the data in the buffer has been modified.

Constructor Detail

### RandomAccessFile

    protected RandomAccessFile(int bufferSize)

### RandomAccessFile

    public RandomAccessFile(String filename,
                            int mode)
                     throws IOException

  Create a new buffered random-access file with a default buffer size. Note that the mode CREATE implies WRITE.

Parameters:
  `filename` - the name of the file.
  `mode` - how the file is to be opened. This may be a combination (logical OR) of CREATE, WRITE, and READ.
Throws:
  `IOException` - if an I/O error occurrs.
  `SecurityException` - if a security manager exists, its checkRead method is called with the name argument to see if the application is allowed read access to the file. If the mode argument is WRITE, its checkWrite method also is called with the name argument to see if the application is allowed write access to the file. Either of these may result in a security exception.

### RandomAccessFile

    public RandomAccessFile(String filename,
                            String modeString)
                     throws IOException

  Creates a random access file stream to read from, and optionally to write to, a file with the specified name.

  The mode argument must either be equal to `"r"` or `"rw"`, indicating that the file is to be opened for input only or for both input and output, respectively. If the mode is `"rw"` and the file does not exist, then an attempt is made to create it.

Parameters:
  `filename` - the system-dependent filename.
  `modeString` - the access mode.
Throws:
  `IllegalArgumentException` - if the mode argument is not equal to `"r"` or to `"rw"`.
  `IOException` - if an I/O error occurs.
  `SecurityException` - if a security manager exists, its `checkRead` method is called with the name argument to see if the application is allowed read access to the file. If the mode argument is equal to `"rw"`, its `checkWrite` method also is called with the name argument to see if the application is allowed write access to the file. Either of these may result in a security exception.
See Also:
  `SecurityException`, `SecurityManager.checkRead(java.lang.String)`

### RandomAccessFile

    public RandomAccessFile(String filename,
                            String modeString,
                            int bufferSize)
                     throws IOException

  Creates a random access file stream to read from, and optionally to write to, a file with the specified name.

  The mode argument must either be equal to `"r"` or `"rw"`, indicating that the file is to be opened for input only or for both input and output, respectively. If the mode is `"rw"` and the file does not exist, then an attempt is made to create it.

Parameters:
  `filename` - the system-dependent filename.
  `modeString` - the access mode.
Throws:
  `IllegalArgumentException` - if the mode argument is not equal to `"r"` or to `"rw"`.
  `IOException` - if an I/O error occurs.
  `SecurityException` - if a security manager exists, its `checkRead` method is called with the name argument to see if the application is allowed read access to the file. If the mode argument is equal to `"rw"`, its `checkWrite` method also is called with the name argument to see if the application is allowed write access to the file. Either of these may result in a security exception.
See Also:
  `SecurityException`, `SecurityManager.checkRead(java.lang.String)`

### RandomAccessFile

    public RandomAccessFile(File file,
                            String modeString)
                     throws IOException

  Creates a random access file stream to read from, and optionally to write to, the file specified by the `File` argument. A new `FileDescriptor` object is created to represent this file connection.

  The mode argument must either be equal to `"r"` or `"rw"`, indicating that the file is to be opened for input only or for both input and output, respectively. The write methods on this object will always throw an `IOException` if the file is opened with a mode of `"r"`. If the mode is `"rw"` and the file does not exist, then an attempt is made to create it.

Parameters:
  `file` - the file object.
  `modeString` - the access mode.
Throws:
  `IllegalArgumentException` - if the mode argument is not equal to `"r"` or to `"rw"`.
  `IOException` - if an I/O error occurs.
  `SecurityException` - if a security manager exists, its `checkRead` method is called with the pathname of the `File` argument to see if the application is allowed read access to the file. If the mode argument is equal to `"rw"`, its `checkWrite` method also is called with the pathname to see if the application is allowed write access to the file.
See Also:
  `File.getPath()`, `SecurityManager.checkRead(java.lang.String)`

### RandomAccessFile

    public RandomAccessFile(String filename,
                            int mode,
                            int bufferSize)
                     throws FileNotFoundException,
                            IOException

  Create a new buffered random-access file with a specified buffer size. Note that the mode CREATE implies WRITE, and the READ is always implied.

Parameters:
  `filename` - the name of the file.
  `mode` - how the file is to be opened. This may be a combination (logical OR) of CREATE, WRITE, and READ.
  `bufferSize` - the size of the temporary buffer, in bytes.
Throws:
  `FileNotFoundException` - if the access is readonly and the file doesn't exist.
  `IOException` - if an I/O error occurrs.
  `SecurityException` - if a security manager exists, its checkRead method is called with the name argument to see if the application is allowed read access to the file. If the mode argument is WRITE, its checkWrite method also is called with the name argument to see if the application is allowed write access to the file. Either of these may result in a security exception.

Method Detail

### close

    public void close()
               throws IOException

  Close the file, and release any associated system resources.

  Throws:
    `IOException` - if an I/O error occurrs.

### 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()
                        throws IOException

  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.
  Throws:
    `IOException` - if an I/O error occurrs.

### 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.

### getFD

    public FileDescriptor getFD()
                         throws IOException

  Returns the opaque file descriptor object associated with this file.

  Returns:
    the file descriptor object associated with this file.
  Throws:
    `IOException` - if an I/O error occurs.

### flush

    public void flush()
               throws IOException

  Copy the contents of the buffer to the disk.

  Throws:
    `IOException` - if an I/O error occurrs.

### read

    public final 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.

### read_

    protected int read_(long pos,
                        byte[] b,
                        int offset,
                        int len)
                 throws IOException

  Throws:
    `IOException`

### 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.

### 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 final 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 final 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`
  Throws:
    `IOException` - if an I/O error occurrs.

### writeBytes

    public final 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.

### 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.

### 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.

### 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)`

### 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)`

### readLine

    public final String readLine()
                          throws IOException

  Reads the next line of text from this file. This method successively reads bytes from the file until it reaches the end of a line of text.

  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 input stream. The line-terminating character(s), if any, are 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 stream is detected, or an exception is thrown.

  Specified by:
    `readLine` in interface `DataInput`
  Returns:
    the next line of text from this file.
  Throws:
    `IOException` - if an I/O error occurs.

### 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()`

### 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.

### 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.

### 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.

### 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.

### 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.

### 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)`

### 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)`

### 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)`

### 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.

  Returns:
    a string representation of the state of the object.

### testBytes

    public static void testBytes(String filename,
                                 int bufferSize)

  Test the byte operations of the RandomAccessFile class. These are the methods that read/write on a byte-by-byte basis. The following checks are made:
  - Writing random bytes to a file.
  - Checking the size of the file is correct.
  - Checking that EOF is correctly raised.
  - Reading the file back in and verifying its contents.
  The test file is 4.5 times the size of the buffer, in order to test paging between buffers, and using files that end in the middle of a buffer. A constant seed value is used for the random number generator, to ensure any bugs are reproduceable.

  Parameters:
    `filename` - the name of the test file to generate.
    `bufferSize` - the size of the buffer to use.

### testBlocks

    public static void testBlocks(String filename)

  Test the block operations of the RandomAccessFile class. These are the methods that read/write blocks of data. The following checks are made:
  - Writing blocks of data that are smaller than the buffer size.
  - Writing blocks of data that are larger than the buffer size.
  - Checking the size of the file is correct.
  - Reading small blocks of the file back in and verifying its contents.
  - Reading large blocks of the file back in and verifying its contents.

  Parameters:
    `filename` - the name of the test file to generate.

### benchmark

    public static void benchmark(String filename,
                                 int bufferSize)

  Benchmark the performance of the new RandomAccessFile class. Its speed is compared to that of a java.io.RandomAccessFile, based on reading and writing a test file, byte by byte.

  Parameters:
    `filename` - the name of the test file.
    `bufferSize` - the buffer size to use.

### main

    public static void main(String[] argv)

  Test the RandomAccessFile class. This involves testing the byte methods, the block methods, and benchmarking the performance. By appending 'test' or 'benchmark' to the command-line, it can be limited to the tests or benchmarking alone. The test filename is only used for the benchmarking, the other tests create a file called "temp.data" in the current directory. Note that the size of the buffer determines the size of the test file (which is 4.5 times the size of the buffer).

  Parameters:
    `argv` - Usage: <testFilename> [bufferSize] [test | benchmark]
  See Also:
    `testBytes(String filename, int bufferSize)`, `testBlocks(String filename)`, `benchmark(String filename, int bufferSize)`