Class CodedOutputStream (3.23.0)

public sealed class CodedOutputStream : IDisposable

Encodes and writes protocol message fields.

Inheritance

object > CodedOutputStream

Implements

IDisposable

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(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
NameDescription
flatArraybyte

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
NameDescription
outputStream

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

CodedOutputStream(Stream, bool)

public CodedOutputStream(Stream output, bool leaveOpen)

Creates a new CodedOutputStream which write to the given stream.

Parameters
NameDescription
outputStream

The stream to write to.

leaveOpenbool

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

CodedOutputStream(Stream, int)

public CodedOutputStream(Stream output, int bufferSize)

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

Parameters
NameDescription
outputStream

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

bufferSizeint

The size of buffer to use internally.

CodedOutputStream(Stream, int, bool)

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
NameDescription
outputStream

The stream to write to.

bufferSizeint

The size of buffer to use internally.

leaveOpenbool

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

Fields

DefaultBufferSize

public static readonly int DefaultBufferSize

The buffer size used by CreateInstance(Stream).

Field Value
TypeDescription
int

Properties

Position

public long Position { get; }

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

Property Value
TypeDescription
long

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
int

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(bool)

public static int ComputeBoolSize(bool value)

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

Parameter
NameDescription
valuebool
Returns
TypeDescription
int

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
NameDescription
valueByteString
Returns
TypeDescription
int

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
NameDescription
valuedouble
Returns
TypeDescription
int

ComputeEnumSize(int)

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
NameDescription
valueint
Returns
TypeDescription
int

ComputeFixed32Size(uint)

public static int ComputeFixed32Size(uint value)

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

Parameter
NameDescription
valueuint
Returns
TypeDescription
int

ComputeFixed64Size(ulong)

public static int ComputeFixed64Size(ulong value)

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

Parameter
NameDescription
valueulong
Returns
TypeDescription
int

ComputeFloatSize(float)

public static int ComputeFloatSize(float value)

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

Parameter
NameDescription
valuefloat
Returns
TypeDescription
int

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
NameDescription
valueIMessage
Returns
TypeDescription
int

ComputeInt32Size(int)

public static int ComputeInt32Size(int value)

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

Parameter
NameDescription
valueint
Returns
TypeDescription
int

ComputeInt64Size(long)

public static int ComputeInt64Size(long value)

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

Parameter
NameDescription
valuelong
Returns
TypeDescription
int

ComputeLengthSize(int)

public static int ComputeLengthSize(int length)

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

Parameter
NameDescription
lengthint
Returns
TypeDescription
int

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
NameDescription
valueIMessage
Returns
TypeDescription
int

ComputeRawVarint32Size(uint)

public static int ComputeRawVarint32Size(uint value)

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

Parameter
NameDescription
valueuint
Returns
TypeDescription
int

ComputeRawVarint64Size(ulong)

public static int ComputeRawVarint64Size(ulong value)

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

Parameter
NameDescription
valueulong
Returns
TypeDescription
int

ComputeSFixed32Size(int)

public static int ComputeSFixed32Size(int value)

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

Parameter
NameDescription
valueint
Returns
TypeDescription
int

ComputeSFixed64Size(long)

public static int ComputeSFixed64Size(long value)

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

Parameter
NameDescription
valuelong
Returns
TypeDescription
int

ComputeSInt32Size(int)

public static int ComputeSInt32Size(int value)

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

Parameter
NameDescription
valueint
Returns
TypeDescription
int

ComputeSInt64Size(long)

public static int ComputeSInt64Size(long value)

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

Parameter
NameDescription
valuelong
Returns
TypeDescription
int

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
NameDescription
valuestring
Returns
TypeDescription
int

ComputeTagSize(int)

public static int ComputeTagSize(int fieldNumber)

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

Parameter
NameDescription
fieldNumberint
Returns
TypeDescription
int

ComputeUInt32Size(uint)

public static int ComputeUInt32Size(uint value)

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

Parameter
NameDescription
valueuint
Returns
TypeDescription
int

ComputeUInt64Size(ulong)

public static int ComputeUInt64Size(ulong value)

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

Parameter
NameDescription
valueulong
Returns
TypeDescription
int

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(bool)

public void WriteBool(bool value)

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

Parameter
NameDescription
valuebool

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
NameDescription
valueByteString

The value to write

WriteDouble(double)

public void WriteDouble(double value)

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

Parameter
NameDescription
valuedouble

The value to write

WriteEnum(int)

public void WriteEnum(int value)

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

Parameter
NameDescription
valueint

The value to write

WriteFixed32(uint)

public void WriteFixed32(uint value)

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

Parameter
NameDescription
valueuint

The value to write

WriteFixed64(ulong)

public void WriteFixed64(ulong value)

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

Parameter
NameDescription
valueulong

The value to write

WriteFloat(float)

public void WriteFloat(float value)

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

Parameter
NameDescription
valuefloat

The value to write

WriteGroup(IMessage)

public void WriteGroup(IMessage value)

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

Parameter
NameDescription
valueIMessage

The value to write

WriteInt32(int)

public void WriteInt32(int value)

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

Parameter
NameDescription
valueint

The value to write

WriteInt64(long)

public void WriteInt64(long value)

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

Parameter
NameDescription
valuelong

The value to write

WriteLength(int)

public void WriteLength(int length)

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

Parameter
NameDescription
lengthint

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
NameDescription
valueIMessage

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
NameDescription
valueIMessage

The value to write

WriteRawTag(byte)

public void WriteRawTag(byte b1)

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

Parameter
NameDescription
b1byte

The encoded tag

WriteRawTag(byte, byte)

public void WriteRawTag(byte b1, byte b2)

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

Parameters
NameDescription
b1byte

The first byte of the encoded tag

b2byte

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
NameDescription
b1byte

The first byte of the encoded tag

b2byte

The second byte of the encoded tag

b3byte

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
NameDescription
b1byte

The first byte of the encoded tag

b2byte

The second byte of the encoded tag

b3byte

The third byte of the encoded tag

b4byte

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
NameDescription
b1byte

The first byte of the encoded tag

b2byte

The second byte of the encoded tag

b3byte

The third byte of the encoded tag

b4byte

The fourth byte of the encoded tag

b5byte

The fifth byte of the encoded tag

WriteSFixed32(int)

public void WriteSFixed32(int value)

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

Parameter
NameDescription
valueint

The value to write.

WriteSFixed64(long)

public void WriteSFixed64(long value)

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

Parameter
NameDescription
valuelong

The value to write

WriteSInt32(int)

public void WriteSInt32(int value)

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

Parameter
NameDescription
valueint

The value to write

WriteSInt64(long)

public void WriteSInt64(long value)

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

Parameter
NameDescription
valuelong

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
NameDescription
valuestring

The value to write

WriteTag(int, WireType)

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

Encodes and writes a tag.

Parameters
NameDescription
fieldNumberint

The number of the field to write the tag for

typeWireFormatWireType

The wire format type of the tag to write

WriteTag(uint)

public void WriteTag(uint tag)

Writes an already-encoded tag.

Parameter
NameDescription
taguint

The encoded tag

WriteUInt32(uint)

public void WriteUInt32(uint value)

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

Parameter
NameDescription
valueuint

The value to write

WriteUInt64(ulong)

public void WriteUInt64(ulong value)

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

Parameter
NameDescription
valueulong

The value to write