package java.io;

/**
 * A data output stream lets an application write primitive Java data types to an output stream in a
 * portable way. An application can then use a data input stream to read the data back in.
 */
public class DataOutputStream extends FilterOutputStream implements DataOutput {

    /**
     * Creates a new data output stream to write data to the specified underlying output stream. The
     * counter <code>written</code> is set to zero.
     *
     * @param out
     *        the underlying output stream, to be saved for later use.
     * @see java.io.FilterOutputStream#out
     */
    public DataOutputStream(OutputStream out) {
        super(out);
        throw new RuntimeException();
    }

    /**
     * Flushes this data output stream. This forces any buffered output bytes to be written out to the
     * stream.
     * <p>
     * The <code>flush</code> method of <code>DataOutputStream</code> calls the <code>flush</code>
     * method of its underlying output stream.
     *
     * @exception IOException
     *            if an I/O error occurs.
     * @see java.io.FilterOutputStream#out
     * @see java.io.OutputStream#flush()
     */
    @Override
    public void flush() throws IOException {
        throw new RuntimeException();
    }

    /**
     * Returns the current value of the counter <code>written</code>, the number of bytes written to
     * this data output stream so far. If the counter overflows, it will be wrapped to
     * Integer.MAX_VALUE.
     *
     * @return the value of the <code>written</code> field.
     * @see java.io.DataOutputStream#written
     */
    public final int size() {
        throw new RuntimeException();
    }

    /**
     * Writes <code>len</code> bytes from the specified byte array starting at offset <code>off</code>
     * to the underlying output stream. If no exception is thrown, the counter <code>written</code> is
     * incremented by <code>len</code>.
     *
     * @param b
     *        the data.
     * @param off
     *        the start offset in the data.
     * @param len
     *        the number of bytes to write.
     * @exception IOException
     *            if an I/O error occurs.
     * @see java.io.FilterOutputStream#out
     */
    @Override
    public void write(byte[] b, int off, int len) throws IOException {
        throw new RuntimeException();
    }

    /**
     * Writes the specified byte (the low eight bits of the argument <code>b</code>) to the underlying
     * output stream. If no exception is thrown, the counter <code>written</code> is incremented by
     * <code>1</code>.
     * <p>
     * Implements the <code>write</code> method of <code>OutputStream</code>.
     *
     * @param b
     *        the <code>byte</code> to be written.
     * @exception IOException
     *            if an I/O error occurs.
     * @see java.io.FilterOutputStream#out
     */
    @Override
    public void write(int b) throws IOException {
        throw new RuntimeException();
    }

    /**
     * Writes a <code>boolean</code> to the underlying output stream as a 1-byte value. The value
     * <code>true</code> is written out as the value <code>(byte)1</code>; the value <code>false</code>
     * is written out as the value <code>(byte)0</code>. If no exception is thrown, the counter
     * <code>written</code> is incremented by <code>1</code>.
     *
     * @param v
     *        a <code>boolean</code> value to be written.
     * @exception IOException
     *            if an I/O error occurs.
     * @see java.io.FilterOutputStream#out
     */
    @Override
    public final void writeBoolean(boolean v) throws IOException {
        throw new RuntimeException();
    }

    /**
     * Writes out a <code>byte</code> to the underlying output stream as a 1-byte value. If no exception
     * is thrown, the counter <code>written</code> is incremented by <code>1</code>.
     *
     * @param v
     *        a <code>byte</code> value to be written.
     * @exception IOException
     *            if an I/O error occurs.
     * @see java.io.FilterOutputStream#out
     */
    @Override
    public final void writeByte(int v) throws IOException {
        throw new RuntimeException();
    }

    /**
     * Writes a <code>char</code> to the underlying output stream as a 2-byte value, high byte first. If
     * no exception is thrown, the counter <code>written</code> is incremented by <code>2</code>.
     *
     * @param v
     *        a <code>char</code> value to be written.
     * @exception IOException
     *            if an I/O error occurs.
     * @see java.io.FilterOutputStream#out
     */
    @Override
    public final void writeChar(int v) throws IOException {
        throw new RuntimeException();
    }

    /**
     * Writes a string to the underlying output stream as a sequence of characters. Each character is
     * written to the data output stream as if by the <code>writeChar</code> method. If no exception is
     * thrown, the counter <code>written</code> is incremented by twice the length of <code>s</code>.
     *
     * @param s
     *        a <code>String</code> value to be written.
     * @exception IOException
     *            if an I/O error occurs.
     * @see java.io.DataOutputStream#writeChar(int)
     * @see java.io.FilterOutputStream#out
     */
    @Override
    public final void writeChars(String s) throws IOException {
        throw new RuntimeException();
    }

    /**
     * Converts the double argument to a <code>long</code> using the <code>doubleToLongBits</code>
     * method in class <code>Double</code>, and then writes that <code>long</code> value to the
     * underlying output stream as an 8-byte quantity, high byte first. If no exception is thrown, the
     * counter <code>written</code> is incremented by <code>8</code>.
     *
     * @param v
     *        a <code>double</code> value to be written.
     * @exception IOException
     *            if an I/O error occurs.
     * @see java.io.FilterOutputStream#out
     * @see java.lang.Double#doubleToLongBits(double)
     */
    @Override
    public final void writeDouble(double v) throws IOException {
        throw new RuntimeException();
    }

    /**
     * Converts the float argument to an <code>int</code> using the <code>floatToIntBits</code> method
     * in class <code>Float</code>, and then writes that <code>int</code> value to the underlying output
     * stream as a 4-byte quantity, high byte first. If no exception is thrown, the counter
     * <code>written</code> is incremented by <code>4</code>.
     *
     * @param v
     *        a <code>float</code> value to be written.
     * @exception IOException
     *            if an I/O error occurs.
     * @see java.io.FilterOutputStream#out
     * @see java.lang.Float#floatToIntBits(float)
     */
    @Override
    public final void writeFloat(float v) throws IOException {
        throw new RuntimeException();
    }

    /**
     * Writes an <code>int</code> to the underlying output stream as four bytes, high byte first. If no
     * exception is thrown, the counter <code>written</code> is incremented by <code>4</code>.
     *
     * @param v
     *        an <code>int</code> to be written.
     * @exception IOException
     *            if an I/O error occurs.
     * @see java.io.FilterOutputStream#out
     */
    @Override
    public final void writeInt(int v) throws IOException {
        throw new RuntimeException();
    }

    /**
     * Writes a <code>long</code> to the underlying output stream as eight bytes, high byte first. In no
     * exception is thrown, the counter <code>written</code> is incremented by <code>8</code>.
     *
     * @param v
     *        a <code>long</code> to be written.
     * @exception IOException
     *            if an I/O error occurs.
     * @see java.io.FilterOutputStream#out
     */
    @Override
    public final void writeLong(long v) throws IOException {
        throw new RuntimeException();
    }

    /**
     * Writes a <code>short</code> to the underlying output stream as two bytes, high byte first. If no
     * exception is thrown, the counter <code>written</code> is incremented by <code>2</code>.
     *
     * @param v
     *        a <code>short</code> to be written.
     * @exception IOException
     *            if an I/O error occurs.
     * @see java.io.FilterOutputStream#out
     */
    @Override
    public final void writeShort(int v) throws IOException {
        throw new RuntimeException();
    }

    /**
     * Writes a string to the underlying output stream using
     * <a href="DataInput.html#modified-utf-8">modified UTF-8</a> encoding in a machine-independent
     * manner.
     * <p>
     * First, two bytes are written to the output stream as if by the <code>writeShort</code> 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 modified UTF-8 encoding for the character. If no exception is thrown, the
     * counter <code>written</code> is incremented by the total number of bytes written to the output
     * stream. This will be at least two plus the length of <code>str</code>, and at most two plus
     * thrice the length of <code>str</code>.
     *
     * @param str
     *        a string to be written.
     * @exception IOException
     *            if an I/O error occurs.
     */
    @Override
    public final void writeUTF(String str) throws IOException {
        throw new RuntimeException();
    }
}
