public sealed class CodedOutputStream : IDisposable
Encodes and writes protocol message fields.
Implements
IDisposableNamespace
Google.ProtobufAssembly
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 | |
---|---|
Name | Description |
flatArray |
byte |
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 | |
---|---|
Name | Description |
output |
Stream The stream to write to. It will be disposed when the returned |
CodedOutputStream(Stream, bool)
public CodedOutputStream(Stream output, bool leaveOpen)
Creates a new CodedOutputStream which write to the given stream.
Parameters | |
---|---|
Name | Description |
output |
Stream The stream to write to. |
leaveOpen |
bool If |
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 | |
---|---|
Name | Description |
output |
Stream The stream to write to. It will be disposed when the returned |
bufferSize |
int 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 | |
---|---|
Name | Description |
output |
Stream The stream to write to. |
bufferSize |
int The size of buffer to use internally. |
leaveOpen |
bool If |
Fields
DefaultBufferSize
public static readonly int DefaultBufferSize
The buffer size used by CreateInstance(Stream).
Field Value | |
---|---|
Type | Description |
int |
Properties
Deterministic
public bool Deterministic { get; set; }
Configures whether or not serialization is deterministic.
Property Value | |
---|---|
Type | Description |
bool |
Deterministic serialization guarantees that for a given binary, equal messages (defined by the equals methods in protos) will always be serialized to the same bytes. This implies:
- Repeated serialization of a message will return the same bytes.
- Different processes of the same binary (which may be executing on different machines) will serialize equal messages to the same bytes.
- Sort map entries by keys in lexicographical order or numerical order. Note: For string keys, the order is based on comparing the UTF-16 code unit value of each character in the strings. The order may be different from the deterministic serialization in other languages where maps are sorted on the lexicographical order of the UTF8 encoded keys.
Position
public long Position { get; }
Returns the current position in the stream, or the position in the output buffer
Property Value | |
---|---|
Type | Description |
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 | |
---|---|
Type | Description |
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 | |
---|---|
Name | Description |
value |
bool |
Returns | |
---|---|
Type | Description |
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 | |
---|---|
Name | Description |
value |
ByteString |
Returns | |
---|---|
Type | Description |
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 | |
---|---|
Name | Description |
value |
double |
Returns | |
---|---|
Type | Description |
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 | |
---|---|
Name | Description |
value |
int |
Returns | |
---|---|
Type | Description |
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 | |
---|---|
Name | Description |
value |
uint |
Returns | |
---|---|
Type | Description |
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 | |
---|---|
Name | Description |
value |
ulong |
Returns | |
---|---|
Type | Description |
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 | |
---|---|
Name | Description |
value |
float |
Returns | |
---|---|
Type | Description |
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 | |
---|---|
Name | Description |
value |
IMessage |
Returns | |
---|---|
Type | Description |
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 | |
---|---|
Name | Description |
value |
int |
Returns | |
---|---|
Type | Description |
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 | |
---|---|
Name | Description |
value |
long |
Returns | |
---|---|
Type | Description |
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 | |
---|---|
Name | Description |
length |
int |
Returns | |
---|---|
Type | Description |
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 | |
---|---|
Name | Description |
value |
IMessage |
Returns | |
---|---|
Type | Description |
int |
ComputeRawVarint32Size(uint)
public static int ComputeRawVarint32Size(uint value)
Computes the number of bytes that would be needed to encode a varint.
Parameter | |
---|---|
Name | Description |
value |
uint |
Returns | |
---|---|
Type | Description |
int |
ComputeRawVarint64Size(ulong)
public static int ComputeRawVarint64Size(ulong value)
Computes the number of bytes that would be needed to encode a varint.
Parameter | |
---|---|
Name | Description |
value |
ulong |
Returns | |
---|---|
Type | Description |
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 | |
---|---|
Name | Description |
value |
int |
Returns | |
---|---|
Type | Description |
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 | |
---|---|
Name | Description |
value |
long |
Returns | |
---|---|
Type | Description |
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 | |
---|---|
Name | Description |
value |
int |
Returns | |
---|---|
Type | Description |
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 | |
---|---|
Name | Description |
value |
long |
Returns | |
---|---|
Type | Description |
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 | |
---|---|
Name | Description |
value |
string |
Returns | |
---|---|
Type | Description |
int |
ComputeTagSize(int)
public static int ComputeTagSize(int fieldNumber)
Computes the number of bytes that would be needed to encode a tag.
Parameter | |
---|---|
Name | Description |
fieldNumber |
int |
Returns | |
---|---|
Type | Description |
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 | |
---|---|
Name | Description |
value |
uint |
Returns | |
---|---|
Type | Description |
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 | |
---|---|
Name | Description |
value |
ulong |
Returns | |
---|---|
Type | Description |
int |
Dispose()
public void Dispose()
Flushes any buffered data and optionally closes the underlying stream, if any.
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 | |
---|---|
Name | Description |
value |
bool 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 | |
---|---|
Name | Description |
value |
ByteString The value to write |
WriteDouble(double)
public void WriteDouble(double value)
Writes a double field value, without a tag, to the stream.
Parameter | |
---|---|
Name | Description |
value |
double The value to write |
WriteEnum(int)
public void WriteEnum(int value)
Writes an enum value, without a tag, to the stream.
Parameter | |
---|---|
Name | Description |
value |
int The value to write |
WriteFixed32(uint)
public void WriteFixed32(uint value)
Writes a fixed32 field value, without a tag, to the stream.
Parameter | |
---|---|
Name | Description |
value |
uint The value to write |
WriteFixed64(ulong)
public void WriteFixed64(ulong value)
Writes a fixed64 field value, without a tag, to the stream.
Parameter | |
---|---|
Name | Description |
value |
ulong The value to write |
WriteFloat(float)
public void WriteFloat(float value)
Writes a float field value, without a tag, to the stream.
Parameter | |
---|---|
Name | Description |
value |
float The value to write |
WriteGroup(IMessage)
public void WriteGroup(IMessage value)
Writes a group, without a tag, to the stream.
Parameter | |
---|---|
Name | Description |
value |
IMessage The value to write |
WriteInt32(int)
public void WriteInt32(int value)
Writes an int32 field value, without a tag, to the stream.
Parameter | |
---|---|
Name | Description |
value |
int The value to write |
WriteInt64(long)
public void WriteInt64(long value)
Writes an int64 field value, without a tag, to the stream.
Parameter | |
---|---|
Name | Description |
value |
long The value to write |
WriteLength(int)
public void WriteLength(int length)
Writes a length (in bytes) for length-delimited data.
Parameter | |
---|---|
Name | Description |
length |
int Length value, in bytes. |
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 | |
---|---|
Name | Description |
value |
IMessage 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 | |
---|---|
Name | Description |
value |
IMessage The value to write |
WriteRawTag(byte)
public void WriteRawTag(byte b1)
Writes the given single-byte tag directly to the stream.
Parameter | |
---|---|
Name | Description |
b1 |
byte The encoded tag |
WriteRawTag(byte, byte)
public void WriteRawTag(byte b1, byte b2)
Writes the given two-byte tag directly to the stream.
Parameters | |
---|---|
Name | Description |
b1 |
byte The first byte of the encoded tag |
b2 |
byte 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 | |
---|---|
Name | Description |
b1 |
byte The first byte of the encoded tag |
b2 |
byte The second byte of the encoded tag |
b3 |
byte 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 | |
---|---|
Name | Description |
b1 |
byte The first byte of the encoded tag |
b2 |
byte The second byte of the encoded tag |
b3 |
byte The third byte of the encoded tag |
b4 |
byte 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 | |
---|---|
Name | Description |
b1 |
byte The first byte of the encoded tag |
b2 |
byte The second byte of the encoded tag |
b3 |
byte The third byte of the encoded tag |
b4 |
byte The fourth byte of the encoded tag |
b5 |
byte 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 | |
---|---|
Name | Description |
value |
int The value to write. |
WriteSFixed64(long)
public void WriteSFixed64(long value)
Writes an sfixed64 value, without a tag, to the stream.
Parameter | |
---|---|
Name | Description |
value |
long The value to write |
WriteSInt32(int)
public void WriteSInt32(int value)
Writes an sint32 value, without a tag, to the stream.
Parameter | |
---|---|
Name | Description |
value |
int The value to write |
WriteSInt64(long)
public void WriteSInt64(long value)
Writes an sint64 value, without a tag, to the stream.
Parameter | |
---|---|
Name | Description |
value |
long 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 | |
---|---|
Name | Description |
value |
string The value to write |
WriteTag(int, WireType)
public void WriteTag(int fieldNumber, WireFormat.WireType type)
Encodes and writes a tag.
Parameters | |
---|---|
Name | Description |
fieldNumber |
int The number of the field to write the tag for |
type |
WireFormatWireType The wire format type of the tag to write |
WriteTag(uint)
public void WriteTag(uint tag)
Writes an already-encoded tag.
Parameter | |
---|---|
Name | Description |
tag |
uint The encoded tag |
WriteUInt32(uint)
public void WriteUInt32(uint value)
Writes a uint32 value, without a tag, to the stream.
Parameter | |
---|---|
Name | Description |
value |
uint The value to write |
WriteUInt64(ulong)
public void WriteUInt64(ulong value)
Writes a uint64 field value, without a tag, to the stream.
Parameter | |
---|---|
Name | Description |
value |
ulong The value to write |