Буферы протокола Google, обратное перемещение головы ввода-вывода в предоставленных объектах потока

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

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

изменить

Интересно, если я сброшу обертки потока и просто использую функции c для переустановки головы, будет ли это работать для классов потока или я окажусь в неопределенной земле?


person Hassan Syed    schedule 05.04.2012    source источник


Ответы (1)


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

person Douglas Leeder    schedule 10.04.2012
comment
Хм, возможно, я списал этот подход по неправильным причинам. Я мог бы использовать файловую систему, я полагаю. - person Hassan Syed; 10.04.2012
comment
Да, это очень разумное предложение, спасибо. Я буду использовать boost::iostream, из которого я могу получить файловый дескриптор и protobuf. таким образом я могу использовать заголовки переменной длины. - person Hassan Syed; 10.04.2012