【发布时间】:2016-12-21 08:09:13
【问题描述】:
在我的一个项目中,我必须缓存有关在大文件中找到的某些数据块的位置信息。我已经实现了一个围绕 std::basic_istream<char>::pos_type 构建的小 API,放置在地图中。
现在我需要将这些描述符序列化为字节流并将它们写入磁盘以供进一步使用(在其他 *nix 机器上也是如此)。我已经读到这种类型是平台相关的,但仍然是一种 POD 类型。所以我的问题是:
- 除了偏移量之外,保存一些东西是否会更好?例如。
std::fpos<std::mbstate_t>保持阅读结构的状态? - 如何安全地从
std::basic_istream<char>::pos_type获取和恢复偏移数据(以及其他需要的信息)?
提前谢谢你。
【问题讨论】:
-
你真的关心序列化字符内状态吗?您是否真的使用 UTF-8 或类似的,并且可能需要序列化单个字符内的位置?
-
不,我只对原子字节偏移感兴趣。但是抱怨任何可能影响性能的流读取结构的隐藏状态(这对我来说很重要)。
-
听起来你可以序列化
streamoff这只是一个数字。既然你说你不在乎序列化字符内的位置,这就足够了。您可以将其存储在 int64_t 中。 -
好吧,显然我想多了。谢谢你,约翰。
标签: c++ linux file-io stl char-traits