В одном из моих проектов я должен кэшировать позиционную информацию о некоторых фрагментах данных, найденных в больших файлах. Я уже реализовал небольшой API, построенный вокруг std::basic_istream<char>::pos_type
, размещенный на картах.Как можно безопасно сериализовать std :: basic_istream <char> :: pos_type?
Теперь мне нужно сериализовать эти дескрипторы в поточный поток и записать их на диск для дальнейшего использования (на других * nix-машинах). Я читал, что этот тип зависит от платформы, но, скорее, является POD-типом. Поэтому я задаю следующие вопросы:
- Будет ли лучше экономить что-то помимо смещений? Например.
std::fpos<std::mbstate_t>
Сохранение состояния структуры считывания? - Как я могу безопасно получать и восстанавливать данные смещения от
std::basic_istream<char>::pos_type
(и другая информация, если это необходимо)?
Благодарим вас заранее.
Вы действительно хотите сериализовать внутрисимвольное состояние? Вы действительно используете UTF-8 или аналогичные и, возможно, потребуется сериализовать позицию, которая находится внутри одного символа? –
Нет. Меня интересуют только атомные байтовые смещения. Но жалуйтесь на любые скрытые состояния структур чтения потока, которые могут повлиять на производительность (что имеет значение для меня). – Crank
Похоже, вы можете просто сериализовать 'streamoff', который является просто числом. Поскольку вы говорите, что не хотите сериализовать внутрисимвольные позиции, этого достаточно. Вы можете сохранить его в int64_t. –