This class contains two kinds of methods: methods that write specific protocol message constructs and field types (e.g. WriteTag and WriteInt32) and methods that write low-level values (e.g. WriteRawVarint32 and WriteRawBytes). If you are writing encoded protocol messages, you should use the former methods, but if you are writing some other format of your own design, use the latter. The names of the former methods are taken from the protocol buffer type names, not .NET types. (Hence WriteFloat instead of WriteSingle, and WriteBool instead of WriteBoolean.)