2012-04-05 4 views
0

Я хочу переместить головку ввода-вывода в начало некоторого CodedOutputStream или ZeroCopyOutputStream, чтобы я мог обновить структуру данных заголовка, сколько файлов protobuf находится в файле, и сколько байтов потребляют следующие сообщения.Буферы протокола Google, обратная перегруппировка главы ввода-вывода в предоставленных объектах потока

Backup function не предназначен для этого, любые предложения? Я создаю формат файла для данных о событиях, где каждый файл содержит множество наборов данных событий. Мне нужно два типа объектов заголовка для этого (фиксированный размер). Глобальный и один набор данных. Я обновляю их после записи в событиях набора данных. Итак, как мне переместить заголовок записи, не повреждая внутреннее состояние объектов потока?.

редактировать

Интересно, если я потопить поток обертки и просто использовать функции с пересадить голову, будет эта работа для потоковых классов, или я в конечном итоге в неопределенном земли?

ответ

1

Я думаю, что наиболее очевидным способом было бы иметь два файла вместо каждого: Основной файл с потоковыми данными, а затем индексный файл с информацией заголовка.

+0

Хм, возможно, я списал этот подход по причинам, не связанным с правом. Я мог бы использовать файловую систему, я полагаю. –

+0

Да, это очень разумное предложение, спасибо. Я буду использовать boost :: iostream, из которого я могу получить filedescriptor from и protobuf. таким образом я могу использовать заголовки переменной длины. –