An OutputStream is created using the following function:

{zcode:java}
package Ice;

public class Util {
    public static OutputStream
    createOutputStream(Communicator communicator);
 
    public static OutputStream
    createOutputStream(Communicator communicator, EncodingVersion version);
}
{zcode}

You can optionally specify an encoding version for the stream, otherwise the stream uses the communicator's default encoding version.

The OutputStream class is shown below.

{zcode:java}
package Ice;

public interface OutputStream {
    Communicator communicator();

    void writeBool(boolean v);
    void writeBoolSeq(boolean[] v);

    void writeByte(byte v);
    void writeByteSeq(byte[] v);

    void writeShort(short v);
    void writeShortSeq(short[] v);

    void writeInt(int v);
    void writeIntSeq(int[] v);

    void writeLong(long v);
    void writeLongSeq(long[] v);

    void writeFloat(float v);
    void writeFloatSeq(float[] v);

    void writeDouble(double v);
    void writeDoubleSeq(double[] v);

    void writeString(String v);
    void writeStringSeq(String[] v);

    void writeSize(int sz);

    void writeProxy(ObjectPrx v);

    void writeObject(Ice.Object v);

    void writeEnum(int v, int maxValue);

    void writeException(UserException ex);

    void startObject(SlicedData sd);
    void endObject();
 
    void startException(SlicedData sd);
    void endException();
 
    void startSlice(String typeId, boolean last);
    void endSlice();

    void startEncapsulation(EncodingVersion encoding, FormatType format);
    void startEncapsulation();
    void endEncapsulation();

    EncodingVersion getEncoding();
 
    void writePendingObjects();
 
    boolean writeOptional(int tag, OptionalFormat format);
 
    int pos();
 
    void rewrite(int sz, int pos);
 
    void startSize();
    void endSize();
 
    byte[] finished();
 
    void reset(boolean clearBuffer);

    void writeSerializable(java.io.Serializable o);

    void destroy();
}
{zcode}

Member functions are provided for inserting all of the primitive types, as well as sequences of primitive types; these are self-explanatory. The remaining member functions have the following semantics:

Here is a simple example that demonstrates how to insert a boolean and a sequence of strings into a stream:

{zcode:java}
final String[] seq = { "Ice", "rocks!" };
Ice.OutputStream out = Ice.Util.createOutputStream(communicator);
try {
    out.writeBool(true);
    out.writeStringSeq(seq);
    byte[] data = out.finished();
} finally {
    out.destroy();
}
{zcode}

See Also