Как разделить последовательность сообщений буфера протокола, чтобы их можно было читать как вперед, так и назад? - PullRequest
0 голосов
/ 13 ноября 2018

В настоящее время я разрабатываю двоичный формат для записи серии сообщений, закодированных в protobuf. Мне нужно иметь возможность читать сообщения от самых новых до самых старых (от конца потока), а также от самых старых до самых новых, поэтому я считаю, что не могу использовать префикс длины , поскольку в документах предлагается для разграничения сообщения, если я не хочу просматривать весь журнал от начала до конца.

Безопасно ли использовать разделители управляющих символов ASCII (то есть 28 разделителей файлов, 29 разделителей групп, 30 разделителей записей, 31 разделитель блоков) для разграничения протобуф-сообщений?

В качестве альтернативы, можно ли использовать что-то вроде суффикса длины в дополнение к префиксу длины для создания сэндвича с сообщением (length message length), позволяющего читать сообщения как вперед, так и назад?

Этот вопрос похож на этот , но в последнем не упоминается сценарий чтения сообщений в обратном направлении, и при этом он не затрагивает конкретно сообщения protobuf. * ​​1012 *

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Длина суффикса отлично подходит для чтения с любого конца.

Если вам также нужна была возможность поиска к середине потока и найти начало следующего сообщения, вы можете использовать Согласованные издержкиЗаполнение байтов для освобождения одного символа, такого как 0x00, для использования в качестве разделителя.

0 голосов
/ 13 ноября 2018

Безопасно ли использовать разделители управляющих символов ASCII

Нет, в основном. Protobuf-сеть может содержать любую возможную последовательность байтов.

Будет работать суффикс длины; необычно, но выполнимо.

...