All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.tangosol.io.WrapperDataOutputStream Maven / Gradle / Ivy

There is a newer version: 24.09
Show newest version
/*
 * Copyright (c) 2000, 2020, Oracle and/or its affiliates.
 *
 * Licensed under the Universal Permissive License v 1.0 as shown at
 * http://oss.oracle.com/licenses/upl.
 */

package com.tangosol.io;


import java.io.DataOutput;
import java.io.IOException;
import java.io.ObjectOutput;
import java.io.OutputStream;


/**
* This is an imitation DataOutputStream class that provides the DataOutput
* interface by delegating to an object that implements the DataOutput
* interface. Primarily, this is intended as a base class for building
* specific-purpose DataOutput wrappers.
*
* @author cp  2004.08.20
*/
public class WrapperDataOutputStream
        extends OutputStream
        implements DataOutput, OutputStreaming
    {
    // ----- constructors ---------------------------------------------------

    /**
    * Construct a WrapperDataOutputStream that will output to the specified
    * object implementing the DataOutput interface.
    *
    * @param out  an object implementing DataOutput to write to
    */
    public WrapperDataOutputStream(DataOutput out)
        {
        m_out = out;
        }


    // ----- accessors ------------------------------------------------------

    /**
    * Obtain the underlying object providing the DataOutput interface that
    * this object is delegating to.
    *
    * @return the underlying DataOutput
    */
    public DataOutput getDataOutput()
        {
        return m_out;
        }

    /**
    * Return the total number of bytes written to the wrapped DataOutput object.
    *
    * @return the total number of bytes written
    */
    public long getBytesWritten()
        {
        return m_cbWritten;
        }

    /**
    * Increment the count of total number of bytes written to the wrapped
    * DataOutput object by the specified number of bytes.
    * 

* If the count has reached Long.MAX_VALUE, the count is not incremented. * * @param cb the number of bytes to increment the count by */ protected void incBytesWritten(int cb) { long cbWritten = m_cbWritten; long cbTotal = cbWritten + cb; if (cbTotal >= 0) { m_cbWritten = cbTotal; } else if (cbWritten != Long.MAX_VALUE) { m_cbWritten = Long.MAX_VALUE; } } // ----- DataOutput methods --------------------------------------------- /** * Writes the eight low-order bits of the argument b. The 24 * high-order bits of b are ignored. * * @param b the byte to write (passed as an integer) * * @exception IOException if an I/O error occurs */ public void write(int b) throws IOException { m_out.write(b); incBytesWritten(1); } /** * Writes all the bytes in the array ab. * * @param ab the byte array to write * * @exception IOException if an I/O error occurs * @exception NullPointerException if ab is * null */ public void write(byte ab[]) throws IOException { m_out.write(ab); incBytesWritten(ab.length); } /** * Writes cb bytes starting at offset of from * the array ab. * * @param ab the byte array to write from * @param of the offset into ab to start writing from * @param cb the number of bytes from ab to write * * @exception IOException if an I/O error occurs * @exception NullPointerException if ab is * null * @exception IndexOutOfBoundsException if of is negative, * or cb is negative, or of+cb is * greater than ab.length */ public void write(byte ab[], int of, int cb) throws IOException { m_out.write(ab, of, cb); incBytesWritten(cb); } /** * Writes the boolean value f. * * @param f the boolean to be written * * @exception IOException if an I/O error occurs */ public void writeBoolean(boolean f) throws IOException { m_out.writeBoolean(f); incBytesWritten(1); } /** * Writes the eight low-order bits of the argument b. The 24 * high-order bits of b are ignored. * * @param b the byte to write (passed as an integer) * * @exception IOException if an I/O error occurs */ public void writeByte(int b) throws IOException { m_out.writeByte(b); incBytesWritten(1); } /** * Writes a short value, comprised of the 16 low-order bits of the * argument n; the 16 high-order bits of n are * ignored. * * @param n the short to write (passed as an integer) * * @exception IOException if an I/O error occurs */ public void writeShort(int n) throws IOException { m_out.writeShort(n); incBytesWritten(2); } /** * Writes a char value, comprised of the 16 low-order bits of the * argument ch; the 16 high-order bits of ch are * ignored. * * @param ch the char to write (passed as an integer) * * @exception IOException if an I/O error occurs */ public void writeChar(int ch) throws IOException { m_out.writeChar(ch); incBytesWritten(2); } /** * Writes an int value. * * @param n the int to write * * @exception IOException if an I/O error occurs */ public void writeInt(int n) throws IOException { m_out.writeInt(n); incBytesWritten(4); } /** * Writes a long value. * * @param l the long to write * * @exception IOException if an I/O error occurs */ public void writeLong(long l) throws IOException { m_out.writeLong(l); incBytesWritten(8); } /** * Writes a float value. * * @param fl the float to write * * @exception IOException if an I/O error occurs */ public void writeFloat(float fl) throws IOException { m_out.writeFloat(fl); incBytesWritten(4); } /** * Writes a double value. * * @param dfl the double to write * * @exception IOException if an I/O error occurs */ public void writeDouble(double dfl) throws IOException { m_out.writeDouble(dfl); incBytesWritten(8); } /** * Writes the String s, but only the low-order byte from each * character of the String is written. * * @param s the String to write * * @exception IOException if an I/O error occurs * @exception NullPointerException if s is null */ public void writeBytes(String s) throws IOException { m_out.writeBytes(s); incBytesWritten(s.length()); } /** * Writes the String s as a sequence of characters. * * @param s the String to write * * @exception IOException if an I/O error occurs * @exception NullPointerException if s is null */ public void writeChars(String s) throws IOException { m_out.writeChars(s); incBytesWritten(s.length() * 2); } /** * Writes the String s as a sequence of characters, but using * UTF-8 encoding for the characters, and including the String length data * so that the corresponding {@link java.io.DataInput#readUTF} method can * reconstitute a String from the written data. * * @param s the String to write * * @exception IOException if an I/O error occurs * @exception NullPointerException if s is null */ public void writeUTF(String s) throws IOException { m_out.writeUTF(s); } // ----- OutputStream methods ------------------------------------------- /** * Flushes this OutputStream and forces any buffered output bytes to be * written. * * @exception IOException if an I/O error occurs */ public void flush() throws IOException { DataOutput out = m_out; if (out instanceof OutputStreaming) { ((OutputStreaming) out).flush(); } else if (out instanceof OutputStream) { ((OutputStream) out).flush(); } else if (out instanceof ObjectOutput) { ((ObjectOutput) out).flush(); } } /** * Closes this OutputStream and releases any associated system resources. * * @exception IOException if an I/O error occurs */ public void close() throws IOException { DataOutput out = m_out; if (out instanceof OutputStreaming) { ((OutputStreaming) out).close(); } else if (out instanceof OutputStream) { ((OutputStream) out).close(); } else if (out instanceof ObjectOutput) { ((ObjectOutput) out).close(); } } // ----- data members --------------------------------------------------- /** * The underlying DataOutput object to use. */ private DataOutput m_out; /** * The total number of bytes written to the wrapped DataOutput object. */ private long m_cbWritten; }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy