On this page:

Initializing an OutputStream in C#

The OutputStream class provides a number of overloaded constructors:

namespace Ice
{
    public class OutputStream
    {
        public OutputStream();
        public OutputStream(Communicator communicator);
        public OutputStream(Communicator communicator, EncodingVersion version);

        ...
    }
}

The constructors optionally accept the following arguments:

We recommend supplying a communicator instance. The stream inspects the communicator's settings to configure several of its own default settings, but you can optionally configure these settings manually using methods that we'll describe later.

If you omit an encoding version, the stream uses the default encoding version of the communicator (if provided) or the most recent encoding version.

If a communicator instance is not available at the time you construct the stream, you can optionally supply it later using one of the overloaded initialize methods:

namespace Ice
{
    public class OutputStream
    {
        public void initialize(Communicator communicator);
        public void initialize(Communicator communicator, EncodingVersion version);

        ...
    }
}

Invoking initialize causes the stream to re-initialize its settings based on the configuration of the given communicator.

Use the following method to manually configure the stream:

namespace Ice
{
    public class OutputStream
    {
        public void setFormat(FormatType fmt);

        ...
    }
}

For instances of Slice classes, the format determines how the slices of an instance are encoded. If the stream is initialized with a communicator, this setting defaults to the value of Ice.Default.SlicedFormat, otherwise the setting defaults to the compact format.

Inserting into an OutputStream in C#

OutputStream provides a number of write methods that allow you to insert Slice types into the stream.

For example, you can insert a boolean and a sequence of strings into a stream as follows:

string[] seq = { "Ice", "rocks!" };
Ice.OutputStream out = new Ice.OutputStream(communicator);
out.writeBool(true);
out.writeStringSeq(seq);
byte[] data = out.finished();

Here are the methods for inserting data into a stream:

namespace Ice
{
    public class OutputStream
    {
        public void writeBool(bool v);
        public void writeBool(int tag, bool v);
        public void writeBool(int tag, Optional<bool> v);
        public void writeBoolSeq(bool[] v);
        public void writeBoolSeq(int count, IEnumerable<bool> v);
        public void writeBoolSeq(int tag, bool[] v);
        public void writeBoolSeq(int tag, Optional<bool[]> v);
        public void writeBoolSeq<T>(int tag, int count, Ice.Optional<T> v)
            where T : IEnumerable<bool>;
        public void writeBoolSeq(int tag, int count, IEnumerable<bool> v);
        public void rewriteBool(bool v, int dest);

        public void writeByte(byte v);
        public void writeByte(int tag, byte v);
        public void writeByte(int tag, Optional<byte> v);
        public void writeByteSeq(byte[] v);
        public void writeByteSeq(int count, IEnumerable<byte> v);
        public void writeByteSeq(int tag, byte[] v);
        public void writeByteSeq(int tag, Optional<byte[]> v);
        public void writeByteSeq<T>(int tag, int count, Ice.Optional<T> v)
            where T : IEnumerable<byte>;
        public void writeByteSeq(int tag, int count, IEnumerable<byte> v);
        public void rewriteByte(byte v, int dest);

        public void writeShort(short v);
        public void writeShort(int tag, short v);
        public void writeShort(int tag, Optional<short> v);
        public void writeShortSeq(short[] v);
        public void writeShortSeq(int count, IEnumerable<short> v);
        public void writeShortSeq(int tag, short[] v);
        public void writeShortSeq(int tag, Optional<short[]> v);
        public void writeShortSeq<T>(int tag, int count, Ice.Optional<T> v)
            where T : IEnumerable<short>;
        public void writeShortSeq(int tag, int count, IEnumerable<short> v);

        public void writeInt(int v);
        public void writeInt(int tag, int v);
        public void writeInt(int tag, Optional<int> v);
        public void writeIntSeq(int[] v);
        public void writeIntSeq(int count, IEnumerable<int> v);
        public void writeIntSeq(int tag, int[] v);
        public void writeIntSeq(int tag, Optional<int[]> v);
        public void writeIntSeq<T>(int tag, int count, Ice.Optional<T> v)
            where T : IEnumerable<int>;
        public void writeIntSeq(int tag, int count, IEnumerable<int> v);
        public void rewriteInt(int v, int dest);

        public void writeLong(long v);
        public void writeLong(int tag, long v);
        public void writeLong(int tag, Optional<long> v);
        public void writeLongSeq(long[] v);
        public void writeLongSeq(int count, IEnumerable<long> v);
        public void writeLongSeq(int tag, long[] v);
        public void writeLongSeq(int tag, Optional<long[]> v);
        public void writeLongSeq<T>(int tag, int count, Ice.Optional<T> v)
            where T : IEnumerable<long>;
        public void writeLongSeq(int tag, int count, IEnumerable<long> v);

        public void writeFloat(float v);
        public void writeFloat(int tag, float v);
        public void writeFloat(int tag, Optional<float> v);
        public void writeFloatSeq(float[] v);
        public void writeFloatSeq(int count, IEnumerable<float> v);
        public void writeFloatSeq(int tag, float[] v);
        public void writeFloatSeq(int tag, Optional<float[]> v);
        public void writeFloatSeq<T>(int tag, int count, Ice.Optional<T> v)
            where T : IEnumerable<float>;
        public void writeFloatSeq(int tag, int count, IEnumerable<float> v);

        public void writeDouble(double v);
        public void writeDouble(int tag, double v);
        public void writeDouble(int tag, Optional<double> v);
        public void writeDoubleSeq(double[] v);
        public void writeDoubleSeq(int count, IEnumerable<double> v);
        public void writeDoubleSeq(int tag, double[] v);
        public void writeDoubleSeq(int tag, Optional<double[]> v);
        public void writeDoubleSeq<T>(int tag, int count, Ice.Optional<T> v)
            where T : IEnumerable<double>;
        public void writeDoubleSeq(int tag, int count, IEnumerable<double> v);

        public void writeString(string v);
        public void writeString(int tag, string v);
        public void writeString(int tag, Optional<string> v);
        public void writeStringSeq(string[] v);
        public void writeStringSeq(int count, IEnumerable<string> v);
        public void writeStringSeq(int tag, string[] v);
        public void writeStringSeq(int tag, Optional<string[]> v);
        public void writeStringSeq<T>(int tag, int count, Ice.Optional<T> v)
            where T : IEnumerable<string>;
        public void writeStringSeq(int tag, int count, IEnumerable<string> v);

        public void writeSize(int sz);

        public void writeProxy(ObjectPrx v);
        public void writeProxy(int tag, ObjectPrx v);
        public void writeProxy(int tag, Optional<ObjectPrx> v);

        public void writeValue(Ice.Object v);
        public void writeValue(int tag, Ice.Object v);
        public void writeValue<T>(int tag, Ice.Optional<T> v)
            where T : Ice.Object;

        public void writeEnum(int v, int maxValue);
        public void writeEnum(int tag, int v, int maxValue);

        public void writeBlob(byte[] v);
        public void writeBlob(byte[] v, int off, int len);

        public void writeException(UserException ex);

        public void startValue(SlicedData sd);
        public void endValue();
 
        public void startException(SlicedData sd);
        public void endException();
 
        public void startSlice(String typeId, int compactId, bool last);
        public void endSlice();

        public void startEncapsulation(EncodingVersion encoding, FormatType format);
        public void startEncapsulation();
        public void endEncapsulation();
        public void writeEmptyEncapsulation(EncodingVersion encoding);
        public void writeEncapsulation(byte[] v);

        public EncodingVersion getEncoding();
 
        public void writePendingValues();
 
        public bool writeOptional(int tag, OptionalFormat format);
 
        public int pos();
        public void pos(int n);
 
        public int startSize();
        public void endSize(int pos);
 
        public byte[] finished();

        public void writeSerializable(object o);

        public void resize(int sz);

        ...
    }
}

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:

See Also