Class CodedOutputStream

public sealed class CodedOutputStream : IDisposable

Encodes and writes protocol message fields.

Inheritance

Object > CodedOutputStream

Namespace

Google.Protobuf

Assembly

Google.Protobuf.dll

Remarks

This class is generally used by generated code to write appropriate primitives to the stream. It effectively encapsulates the lowest levels of protocol buffer format. Unlike some other implementations, this does not include combined "write tag and value" methods. Generated code knows the exact byte representations of the tags they're going to write, so there's no need to re-encode them each time. Manually-written code calling this class should just call one of the WriteTag overloads before each value.

Repeated fields and map fields are not handled by this class; use RepeatedField<T> and MapField<TKey, TValue> to serialize such fields.

Constructors

CodedOutputStream(Stream)

public CodedOutputStream(Stream output)

Creates a new CodedOutputStream which write to the given stream, and disposes of that stream when the returned CodedOutputStream is disposed.

Parameter
TypeNameDescription
Streamoutput

The stream to write to. It will be disposed when the returned CodedOutputStream is disposed.

CodedOutputStream(Stream, Boolean)

public CodedOutputStream(Stream output, bool leaveOpen)

Creates a new CodedOutputStream which write to the given stream.

Parameters
TypeNameDescription
Streamoutput

The stream to write to.

BooleanleaveOpen

If true, output is left open when the returned CodedOutputStream is disposed; if false, the provided stream is disposed as well.

CodedOutputStream(Stream, Int32)

public CodedOutputStream(Stream output, int bufferSize)

Creates a new CodedOutputStream which write to the given stream and uses the specified buffer size.

Parameters
TypeNameDescription
Streamoutput

The stream to write to. It will be disposed when the returned CodedOutputStream is disposed.

Int32bufferSize

The size of buffer to use internally.

CodedOutputStream(Stream, Int32, Boolean)

public CodedOutputStream(Stream output, int bufferSize, bool leaveOpen)

Creates a new CodedOutputStream which write to the given stream and uses the specified buffer size.

Parameters
TypeNameDescription
Streamoutput

The stream to write to.

Int32bufferSize

The size of buffer to use internally.

BooleanleaveOpen

If true, output is left open when the returned CodedOutputStream is disposed; if false, the provided stream is disposed as well.

CodedOutputStream(Byte[])

public CodedOutputStream(byte[] flatArray)

Creates a new CodedOutputStream that writes directly to the given byte array. If more bytes are written than fit in the array, OutOfSpaceException will be thrown.

Parameter
TypeNameDescription
Byte[]flatArray

Fields

DefaultBufferSize

public static readonly int DefaultBufferSize

The buffer size used by CreateInstance(Stream).

Field Value
TypeDescription
Int32

Properties

Position

public long Position { get; }

Returns the current position in the stream, or the position in the output buffer

Property Value
TypeDescription
Int64

SpaceLeft

public int SpaceLeft { get; }

If writing to a flat array, returns the space left in the array. Otherwise, throws an InvalidOperationException.

Property Value
TypeDescription
Int32

Methods

CheckNoSpaceLeft()

public void CheckNoSpaceLeft()

Verifies that SpaceLeft returns zero. It's common to create a byte array that is exactly big enough to hold a message, then write to it with a CodedOutputStream. Calling CheckNoSpaceLeft after writing verifies that the message was actually as big as expected, which can help finding bugs.

ComputeBoolSize(Boolean)

public static int ComputeBoolSize(bool value)

Computes the number of bytes that would be needed to encode a bool field, including the tag.

Parameter
TypeNameDescription
Booleanvalue
Returns
TypeDescription
Int32

ComputeBytesSize(ByteString)

public static int ComputeBytesSize(ByteString value)

Computes the number of bytes that would be needed to encode a bytes field, including the tag.

Parameter
TypeNameDescription
ByteStringvalue
Returns
TypeDescription
Int32

ComputeDoubleSize(Double)

public static int ComputeDoubleSize(double value)

Computes the number of bytes that would be needed to encode a double field, including the tag.

Parameter
TypeNameDescription
Doublevalue
Returns
TypeDescription
Int32

ComputeEnumSize(Int32)

public static int ComputeEnumSize(int value)

Computes the number of bytes that would be needed to encode a enum field, including the tag. The caller is responsible for converting the enum value to its numeric value.

Parameter
TypeNameDescription
Int32value
Returns
TypeDescription
Int32

ComputeFixed32Size(UInt32)

public static int ComputeFixed32Size(uint value)

Computes the number of bytes that would be needed to encode a fixed32 field, including the tag.

Parameter
TypeNameDescription
UInt32value
Returns
TypeDescription
Int32

ComputeFixed64Size(UInt64)

public static int ComputeFixed64Size(ulong value)

Computes the number of bytes that would be needed to encode a fixed64 field, including the tag.

Parameter
TypeNameDescription
UInt64value
Returns
TypeDescription
Int32

ComputeFloatSize(Single)

public static int ComputeFloatSize(float value)

Computes the number of bytes that would be needed to encode a float field, including the tag.

Parameter
TypeNameDescription
Singlevalue
Returns
TypeDescription
Int32

ComputeGroupSize(IMessage)

public static int ComputeGroupSize(IMessage value)

Computes the number of bytes that would be needed to encode a group field, including the tag.

Parameter
TypeNameDescription
IMessagevalue
Returns
TypeDescription
Int32

ComputeInt32Size(Int32)

public static int ComputeInt32Size(int value)

Computes the number of bytes that would be needed to encode an int32 field, including the tag.

Parameter
TypeNameDescription
Int32value
Returns
TypeDescription
Int32

ComputeInt64Size(Int64)

public static int ComputeInt64Size(long value)

Computes the number of bytes that would be needed to encode an int64 field, including the tag.

Parameter
TypeNameDescription
Int64value
Returns
TypeDescription
Int32

ComputeLengthSize(Int32)

public static int ComputeLengthSize(int length)

Computes the number of bytes that would be needed to encode a length, as written by WriteLength(Int32).

Parameter
TypeNameDescription
Int32length
Returns
TypeDescription
Int32

ComputeMessageSize(IMessage)

public static int ComputeMessageSize(IMessage value)

Computes the number of bytes that would be needed to encode an embedded message field, including the tag.

Parameter
TypeNameDescription
IMessagevalue
Returns
TypeDescription
Int32

ComputeRawVarint32Size(UInt32)

public static int ComputeRawVarint32Size(uint value)

Computes the number of bytes that would be needed to encode a varint.

Parameter
TypeNameDescription
UInt32value
Returns
TypeDescription
Int32

ComputeRawVarint64Size(UInt64)

public static int ComputeRawVarint64Size(ulong value)

Computes the number of bytes that would be needed to encode a varint.

Parameter
TypeNameDescription
UInt64value
Returns
TypeDescription
Int32

ComputeSFixed32Size(Int32)

public static int ComputeSFixed32Size(int value)

Computes the number of bytes that would be needed to encode an sfixed32 field, including the tag.

Parameter
TypeNameDescription
Int32value
Returns
TypeDescription
Int32

ComputeSFixed64Size(Int64)

public static int ComputeSFixed64Size(long value)

Computes the number of bytes that would be needed to encode an sfixed64 field, including the tag.

Parameter
TypeNameDescription
Int64value
Returns
TypeDescription
Int32

ComputeSInt32Size(Int32)

public static int ComputeSInt32Size(int value)

Computes the number of bytes that would be needed to encode an sint32 field, including the tag.

Parameter
TypeNameDescription
Int32value
Returns
TypeDescription
Int32

ComputeSInt64Size(Int64)

public static int ComputeSInt64Size(long value)

Computes the number of bytes that would be needed to encode an sint64 field, including the tag.

Parameter
TypeNameDescription
Int64value
Returns
TypeDescription
Int32

ComputeStringSize(String)

public static int ComputeStringSize(String value)

Computes the number of bytes that would be needed to encode a string field, including the tag.

Parameter
TypeNameDescription
Stringvalue
Returns
TypeDescription
Int32

ComputeTagSize(Int32)

public static int ComputeTagSize(int fieldNumber)

Computes the number of bytes that would be needed to encode a tag.

Parameter
TypeNameDescription
Int32fieldNumber
Returns
TypeDescription
Int32

ComputeUInt32Size(UInt32)

public static int ComputeUInt32Size(uint value)

Computes the number of bytes that would be needed to encode a uint32 field, including the tag.

Parameter
TypeNameDescription
UInt32value
Returns
TypeDescription
Int32

ComputeUInt64Size(UInt64)

public static int ComputeUInt64Size(ulong value)

Computes the number of bytes that would be needed to encode a uint64 field, including the tag.

Parameter
TypeNameDescription
UInt64value
Returns
TypeDescription
Int32

Dispose()

public void Dispose()

Flushes any buffered data and optionally closes the underlying stream, if any.

Remarks

By default, any underlying stream is closed by this method. To configure this behaviour, use a constructor overload with a leaveOpen parameter. If this instance does not have an underlying stream, this method does nothing.

For the sake of efficiency, calling this method does not prevent future write calls - but if a later write ends up writing to a stream which has been disposed, that is likely to fail. It is recommend that you not call any other methods after this.

Flush()

public void Flush()

Flushes any buffered data to the underlying stream (if there is one).

WriteBool(Boolean)

public void WriteBool(bool value)

Writes a bool field value, without a tag, to the stream.

Parameter
TypeNameDescription
Booleanvalue

The value to write

WriteBytes(ByteString)

public void WriteBytes(ByteString value)

Write a byte string, without a tag, to the stream. The data is length-prefixed.

Parameter
TypeNameDescription
ByteStringvalue

The value to write

WriteDouble(Double)

public void WriteDouble(double value)

Writes a double field value, without a tag, to the stream.

Parameter
TypeNameDescription
Doublevalue

The value to write

WriteEnum(Int32)

public void WriteEnum(int value)

Writes an enum value, without a tag, to the stream.

Parameter
TypeNameDescription
Int32value

The value to write

WriteFixed32(UInt32)

public void WriteFixed32(uint value)

Writes a fixed32 field value, without a tag, to the stream.

Parameter
TypeNameDescription
UInt32value

The value to write

WriteFixed64(UInt64)

public void WriteFixed64(ulong value)

Writes a fixed64 field value, without a tag, to the stream.

Parameter
TypeNameDescription
UInt64value

The value to write

WriteFloat(Single)

public void WriteFloat(float value)

Writes a float field value, without a tag, to the stream.

Parameter
TypeNameDescription
Singlevalue

The value to write

WriteGroup(IMessage)

public void WriteGroup(IMessage value)

Writes a group, without a tag, to the stream.

Parameter
TypeNameDescription
IMessagevalue

The value to write

WriteInt32(Int32)

public void WriteInt32(int value)

Writes an int32 field value, without a tag, to the stream.

Parameter
TypeNameDescription
Int32value

The value to write

WriteInt64(Int64)

public void WriteInt64(long value)

Writes an int64 field value, without a tag, to the stream.

Parameter
TypeNameDescription
Int64value

The value to write

WriteLength(Int32)

public void WriteLength(int length)

Writes a length (in bytes) for length-delimited data.

Parameter
TypeNameDescription
Int32length

Length value, in bytes.

Remarks

This method simply writes a rawint, but exists for clarity in calling code.

WriteMessage(IMessage)

public void WriteMessage(IMessage value)

Writes a message, without a tag, to the stream. The data is length-prefixed.

Parameter
TypeNameDescription
IMessagevalue

The value to write

WriteRawMessage(IMessage)

public void WriteRawMessage(IMessage value)

Writes a message, without a tag, to the stream. Only the message data is written, without a length-delimiter.

Parameter
TypeNameDescription
IMessagevalue

The value to write

WriteRawTag(Byte)

public void WriteRawTag(byte b1)

Writes the given single-byte tag directly to the stream.

Parameter
TypeNameDescription
Byteb1

The encoded tag

WriteRawTag(Byte, Byte)

public void WriteRawTag(byte b1, byte b2)

Writes the given two-byte tag directly to the stream.

Parameters
TypeNameDescription
Byteb1

The first byte of the encoded tag

Byteb2

The second byte of the encoded tag

WriteRawTag(Byte, Byte, Byte)

public void WriteRawTag(byte b1, byte b2, byte b3)

Writes the given three-byte tag directly to the stream.

Parameters
TypeNameDescription
Byteb1

The first byte of the encoded tag

Byteb2

The second byte of the encoded tag

Byteb3

The third byte of the encoded tag

WriteRawTag(Byte, Byte, Byte, Byte)

public void WriteRawTag(byte b1, byte b2, byte b3, byte b4)

Writes the given four-byte tag directly to the stream.

Parameters
TypeNameDescription
Byteb1

The first byte of the encoded tag

Byteb2

The second byte of the encoded tag

Byteb3

The third byte of the encoded tag

Byteb4

The fourth byte of the encoded tag

WriteRawTag(Byte, Byte, Byte, Byte, Byte)

public void WriteRawTag(byte b1, byte b2, byte b3, byte b4, byte b5)

Writes the given five-byte tag directly to the stream.

Parameters
TypeNameDescription
Byteb1

The first byte of the encoded tag

Byteb2

The second byte of the encoded tag

Byteb3

The third byte of the encoded tag

Byteb4

The fourth byte of the encoded tag

Byteb5

The fifth byte of the encoded tag

WriteSFixed32(Int32)

public void WriteSFixed32(int value)

Writes an sfixed32 value, without a tag, to the stream.

Parameter
TypeNameDescription
Int32value

The value to write.

WriteSFixed64(Int64)

public void WriteSFixed64(long value)

Writes an sfixed64 value, without a tag, to the stream.

Parameter
TypeNameDescription
Int64value

The value to write

WriteSInt32(Int32)

public void WriteSInt32(int value)

Writes an sint32 value, without a tag, to the stream.

Parameter
TypeNameDescription
Int32value

The value to write

WriteSInt64(Int64)

public void WriteSInt64(long value)

Writes an sint64 value, without a tag, to the stream.

Parameter
TypeNameDescription
Int64value

The value to write

WriteString(String)

public void WriteString(string value)

Writes a string field value, without a tag, to the stream. The data is length-prefixed.

Parameter
TypeNameDescription
Stringvalue

The value to write

WriteTag(Int32, WireFormat.WireType)

public void WriteTag(int fieldNumber, WireFormat.WireType type)

Encodes and writes a tag.

Parameters
TypeNameDescription
Int32fieldNumber

The number of the field to write the tag for

WireFormat.WireTypetype

The wire format type of the tag to write

WriteTag(UInt32)

public void WriteTag(uint tag)

Writes an already-encoded tag.

Parameter
TypeNameDescription
UInt32tag

The encoded tag

WriteUInt32(UInt32)

public void WriteUInt32(uint value)

Writes a uint32 value, without a tag, to the stream.

Parameter
TypeNameDescription
UInt32value

The value to write

WriteUInt64(UInt64)

public void WriteUInt64(ulong value)

Writes a uint64 field value, without a tag, to the stream.

Parameter
TypeNameDescription
UInt64value

The value to write