An OutputStream is created using the following function:

{zcode:cs}
namespace Ice
{
    public sealed 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:cs}
namespace Ice
{
    public interface OutputStream
    {
        Communicator communicator();

        void writeBool(bool v);
        void writeBoolSeq(bool[] 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, bool last);
        void endSlice();

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

        EncodingVersion getEncoding();
 
        void writePendingObjects();
 
        bool writeOptional(int tag, OptionalFormat format);
 
        int pos();
 
        void rewrite(int sz, int pos);
 
        void startSize();
        void endSize();

        byte[] finished();

        void reset(bool clearBuffer);

        void writeSerializable(object v);

        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:cs}
string[] seq = { "Ice", "rocks!" };
Ice.OutputStream outStream
    = Ice.Util.createOutputStream(communicator);
try {
    outStream.writeBool(true);
    outStream.writeStringSeq(seq);
    byte[] data = outStream.finished();
} finally {
    outStream.destroy();
}
{zcode}

See Also