Reads and decodes protocol message fields.
This class contains two kinds of methods: methods that read specific protocol
message constructs and field types (e.g.
#readInt32()) and methods that read low-level values (e.g.
#readRawBytes). If you are reading
encoded protocol messages, you should use the former methods, but if you are
reading some other format of your own design, use the latter.