DataInput interface. 
 *
 * @author Aaron M. Renn (arenn@urbanophile.com)
 * @author Tom Tromey value is true, a byte with the value of
   * 1 will be written, otherwise a byte with the value of 0 will be 
   * written.
   *
   * The value written can be read using the readBoolean
   * method in DataInput.
   *
   * @param value The boolean value to write
   *
   * @exception IOException If an error occurs
   *
   * @see DataInput#readBoolean
   */
  void writeBoolean(boolean value) throws IOException;
  /**
   * This method writes a Java byte value to an output stream.  The
   * byte to be written will be in the lowest 8 bits of the 
   * int value passed.
   *
   * The value written can be read using the readByte or
   * readUnsignedByte methods in DataInput.
   *
   * @param value The int value to write
   *
   * @exception IOException If an error occurs
   *
   * @see DataInput#readByte
   * @see DataInput#readUnsignedByte
   */
  void writeByte(int value) throws IOException;
  /**
   * This method writes a Java char value to an output stream.  The
   * char to be written will be in the lowest 16 bits of the int
   * value passed.  These bytes will be written "big endian".  That is,
   * with the high byte written first in the following manner:
   * 
   * byte0 = (byte)((value & 0xFF00) >> 8);
   * 
   * byte1 = (byte)(value & 0x00FF);
   *
   * The value written can be read using the readChar
   * method in DataInput.
   *
   * @param value The char value to write
   *
   * @exception IOException If an error occurs
   *
   * @see DataInput#readChar
   */
  void writeChar(int value) throws IOException;
  /**
   * This method writes a Java short value to an output stream.  The
   * char to be written will be in the lowest 16 bits of the int
   * value passed.  These bytes will be written "big endian".  That is,
   * with the high byte written first in the following manner:
   * 
   * byte0 = (byte)((value & 0xFF00) >> 8);
   * 
   * byte1 = (byte)(value & 0x00FF);
   *
   * The value written can be read using the readShort and
   * readUnsignedShort methods in DataInput.
   *
   * @param value The int value to write as a 16-bit value
   *
   * @exception IOException If an error occurs
   *
   * @see DataInput#readShort
   * @see DataInput#readUnsignedShort
   */
  void writeShort(int value) throws IOException;
  /**
   * This method writes a Java int value to an output stream.  The 4 bytes
   * of the passed value will be written "big endian".  That is, with
   * the high byte written first in the following manner:
   * 
   * byte0 = (byte)((value & 0xFF000000) >> 24);
   * 
   * byte1 = (byte)((value & 0x00FF0000) >> 16);
   * byte2 = (byte)((value & 0x0000FF00) >> 8);
   * byte3 = (byte)(value & 0x000000FF);
   *
   * The value written can be read using the readInt
   * method in DataInput.
   *
   * @param value The int value to write
   *
   * @exception IOException If an error occurs
   *
   * @see DataInput#readInt
   */
  void writeInt(int value) throws IOException;
  /**
   * This method writes a Java long value to an output stream.  The 8 bytes
   * of the passed value will be written "big endian".  That is, with
   * the high byte written first in the following manner:
   * 
   * byte0 = (byte)((value & 0xFF00000000000000L) >> 56);
   * 
   * byte1 = (byte)((value & 0x00FF000000000000L) >> 48);
   * byte2 = (byte)((value & 0x0000FF0000000000L) >> 40);
   * byte3 = (byte)((value & 0x000000FF00000000L) >> 32);
   * byte4 = (byte)((value & 0x00000000FF000000L) >> 24);
   * byte5 = (byte)((value & 0x0000000000FF0000L) >> 16);
   * byte6 = (byte)((value & 0x000000000000FF00L) >> 8);
   * byte7 = (byte)(value & 0x00000000000000FFL);
   *
   * The value written can be read using the readLong
   * method in DataInput.
   *
   * @param value The long value to write
   *
   * @exception IOException If an error occurs
   *
   * @see DataInput#readLong
   */
  void writeLong(long value) throws IOException;
  /**
   * This method writes a Java float value to the stream.  This
   * value is written by first calling the method
   * Float.floatToIntBits
   * to retrieve an int representing the floating point number,
   * then writing this int value to the stream exactly the same
   * as the writeInt() method does.
   *
   * The value written can be read using the readFloat
   * method in DataInput.
   *
   * @param value The float value to write
   *
   * @exception IOException If an error occurs
   *
   * @see writeInt
   * @see DataInput#readFloat
   * @see Float#floatToIntBits
   */
  void writeFloat(float value) throws IOException;
  /**
   * This method writes a Java double value to the stream.  This
   * value is written by first calling the method
   * Double.doubleToLongBits
   * to retrieve an long representing the floating point number,
   * then writing this long value to the stream exactly the same
   * as the writeLong() method does.
   *
   * The value written can be read using the readDouble
   * method in DataInput.
   *
   * @param value The double value to write
   *
   * @exception IOException If any other error occurs
   *
   * @see writeLong
   * @see DataInput#readDouble
   * @see Double#doubleToLongBits
   */
  void writeDouble(double value) throws IOException;
  /**
   * This method writes all the bytes in a String out to the
   * stream.  One byte is written for each character in the
   * String.
   * The high eight bits of each character are discarded, thus this
   * method is inappropriate for completely representing Unicode characters.
   *
   * @param value The String to write
   *
   * @exception IOException If an error occurs
   */
  void writeBytes(String value) throws IOException;
  /**
   * This method writes all the characters of a String to an 
   * output stream as an array of char's. Each character
   * is written using the method specified in the writeChar
   * method. 
   *
   * @param value The String to write
   *
   * @exception IOException If an error occurs
   *
   * @see writeChar
   */
  void writeChars(String value) throws IOException;
  /**
  * This method writes a Java String to the stream in a modified
   * UTF-8 format.  First, two bytes are written to the stream indicating the
   * number of bytes to follow.  This is written in the form of a Java
   * short value in the same manner used by the 
   * writeShort method.  Note that this is the number of 
   * bytes in the
   * encoded String not the String length.  Next
   * come the encoded characters.  Each character in the String
   * is encoded as either one, two or three bytes.  For characters in the
   * range of \u0001 to \u007F, one byte is used.  
   * The character
   * value goes into bits 0-7 and bit eight is 0.  For characters in the range
   * of \u0080 to \u007FF, two bytes are used.  Bits
   * 6-10 of the character value are encoded bits 0-4 of the first byte, with
   * the high bytes having a value of "110".  Bits 0-5 of the character value
   * are stored in bits 0-5 of the second byte, with the high bits set to
   * "10".  This type of encoding is also done for the null character
   * \u0000.  This eliminates any C style NUL character values
   * in the output.  All remaining characters are stored as three bytes.
   * Bits 12-15 of the character value are stored in bits 0-3 of the first
   * byte.  The high bits of the first bytes are set to "1110".  Bits 6-11
   * of the character value are stored in bits 0-5 of the second byte.  The
   * high bits of the second byte are set to "10".  And bits 0-5 of the
   * character value are stored in bits 0-5 of byte three, with the high bits
   * of that byte set to "10".
   *
   * The value written can be read using the readUTF
   * method in DataInput.
   *
   * @param value The String to write
   *
   * @exception IOException If an error occurs
   *
   * @see DataInput#readUTF
   */
  void writeUTF(String value) throws IOException;
  /**
   * This method writes an 8-bit value (passed into the method as a Java
   * int) to an output stream.  The low 8 bits of the
   * passed value are written.
   *
   * @param value The byte to write to the output stream
   *
   * @exception IOException If an error occurs
   */
  void write(int value) throws IOException;
  /**
   * This method writes the raw byte array passed in to the output stream.
   *
   * @param buf The byte array to write
   *
   * @exception IOException If an error occurs
   */
  void write(byte[] buf) throws IOException;
  /**
   * This method writes raw bytes from the passed array buf 
   * starting
   * offset bytes into the buffer.  The number of bytes 
   * written will be exactly len. 
   *
   * @param buf The buffer from which to write the data
   * @param offset The offset into the buffer to start writing data from
   * @param len The number of bytes to write from the buffer to the output 
   * stream
   *
   * @exception IOException If any other error occurs
   */
  void write(byte[] buf, int offset, int len) throws IOException;
} // interface DataOutput