По сути, это дополнительный маркер, который может использоваться (хотя и не обязательно) для указания "типа" добавляемого сообщения, начиная с предположения (при использовании *WithLengthPrefix
подход) состоит в том, что в одном потоке есть несколько сообщений.
Включение также означает, что весь составной поток является полностью действительным сообщением protobuf. * 1010 *
Способы использования этого:
- вы можете сериализовать
List<Foo>
, а затем повторно десериализовать (с префиксом длины) отдельные элементы Foo
или наоборот
- с разнородным набором объектов, вы можете использовать API
Serializer.NonGeneric
, чтобы разрешить разрешение типа на основе тега, то есть эквивалент кода «если 1, то Счет-фактура; если 2, то Заказ, если 3, затем пропустить его если 4, то Клиент "и т. д. - это особенно полезно, если использовать NetworkStream
в качестве устройства для отправки сообщений. Этот подход (использование другого тега для каждого типа) позволяет считывать объекты из потока и корректно десериализовать их, не зная заранее тип следующего сообщения
Можно опустить это, если хотите - просто пропустите ноль (IIRC). Это сэкономит (как правило) байт на каждое добавленное сообщение, но: это означает, что поток больше не является действительным протобуфом сам по себе. Конечно, его можно прочитать, пройдя ноль при чтении.