如何安全地序列化 std::basic_istream<char>::pos_type?
How one can safely serialize std::basic_istream<char>::pos_type?
在我的一个项目中,我必须缓存有关在大文件中找到的某些数据块的位置信息。我已经在地图中实现了一个围绕 std::basic_istream<char>::pos_type
构建的小型 API。
现在我需要将这些描述符序列化为字节流并将它们写入磁盘以供进一步使用(在其他 *nix 机器上也是如此)。我读过这种类型是平台相关的,但仍然是 POD 类型。所以我的问题是:
- 除了偏移量之外,保存一些东西是否更好?例如。
std::fpos<std::mbstate_t>
保持读取结构的状态?
- 我如何安全地从
std::basic_istream<char>::pos_type
获取和恢复偏移数据(以及其他需要的信息)?
提前致谢。
std::fpos<mbstate_t>
的结构未指定,mbstate_t
中可能存在非平凡状态。您当然不能可移植地序列化这些对象。你可以得到一个偏移类型(std::streamoff
)的值,它是一个整数类型,它的值可以被序列化。
在我的一个项目中,我必须缓存有关在大文件中找到的某些数据块的位置信息。我已经在地图中实现了一个围绕 std::basic_istream<char>::pos_type
构建的小型 API。
现在我需要将这些描述符序列化为字节流并将它们写入磁盘以供进一步使用(在其他 *nix 机器上也是如此)。我读过这种类型是平台相关的,但仍然是 POD 类型。所以我的问题是:
- 除了偏移量之外,保存一些东西是否更好?例如。
std::fpos<std::mbstate_t>
保持读取结构的状态? - 我如何安全地从
std::basic_istream<char>::pos_type
获取和恢复偏移数据(以及其他需要的信息)?
提前致谢。
std::fpos<mbstate_t>
的结构未指定,mbstate_t
中可能存在非平凡状态。您当然不能可移植地序列化这些对象。你可以得到一个偏移类型(std::streamoff
)的值,它是一个整数类型,它的值可以被序列化。