Если вы ищете решение C ++, Kenton Varda представила заплату для protobuf примерно в августе 2015 года , в которой добавлена поддержка вызовов writeDelimitedTo () и readDelimitedFrom (), которые сериализуют / десериализуют последовательность протосообщения в / из файла способом, совместимым с Java-версией этих вызовов.К сожалению, этот патч еще не утвержден, поэтому, если вам нужна функциональность, вам нужно объединить его самостоятельно.
Другой вариант - Google имеет открытый код для чтения / записи файла protobuf через другие проекты.Например, библиотека or-tools содержит классы RecordReader и RecordWriter , которые сериализуют / десериализуют протопоток в файл.
Если вам нужны автономные версии этих классов, которые почти не имеют внешних зависимостей, у меня есть ветвь or-tools, которая содержит только эти классы.См .: https://github.com/moof2k/recordio
Чтение и запись с помощью этих классов просты:
File* file = File::Open("proto.log", "w");
RecordWriter writer(file);
writer.WriteProtocolMessage(msg1);
writer.WriteProtocolMessage(msg2);
...
writer.Close();