流增加.序列化档案
Streaming Boost.Serialization archives
我有一个大型数据集(100k+项),我想使用Boost.Serialization进行序列化。
现在,当处理更大的数据集时,整个数据集不再适合内存了(我目前在存档中存储了一个std::map
和所有数据)。因为我既不需要随机读写,一次只需要访问一个项目,所以我考虑通过直接将实例保存到存档(archive << item1 << item2 ...
)并逐个解包来流式传输数据集。
另一种选择是从头开始开发一种新的文件格式(像<length><block>
这样简单的文件格式,其中每个<block>
对应一个Boost。序列化归档),因为我注意到在Boost中似乎无法检测归档的结束。没有捕获异常的序列化(我认为,在读取超过归档结束时应该抛出input_stream_error
)。
哪个选项更可取?在流媒体中滥用序列化归档看起来很奇怪,但它有一个很大的优点,就是不用重新发明轮子,而文件格式包装归档感觉更干净,但更容易出错。
为流使用boost序列化是而不是滥用它,也不奇怪。
实际上,Boost序列化只有,只有流存档接口。所以,是的,适用的方法是像你说的那样做:
archive << number_of_items;
for(auto it = input_iterator(); it != end(); ++it)
archive << *it;
事实上,在你的serialize
方法中,几乎没有什么可以阻止你做同样的事情。你甚至可以通过将你的流包装成一些东西(比如iterator_range
?)并扩展Boost序列化来"理解"这些,就像它"理解"容器,数组等,使它"自动"。
文件格式方法肯定是而不是更干净(从库的角度来看),因为它破坏了归档格式隔离。序列化库经过精心设计,以避免了解归档表示,而规避这一点将破坏抽象。也看到
- Boost c++序列化开销
- 为什么二进制文件与文本相比差异很大?
相关文章:
- 如何在C++中序列化结构数据
- 序列化,没有库的整数,得到奇怪的结果
- 如何知道QDataStream不能反序列化某些内容
- 如何使用Python从C++中读取谷物序列化数据
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 带有Protobuf序列化的C++Hazelcast:字符串不是UTF-8格式的
- 自定义对象的dlib序列化在gcc中失败
- C++boost序列化多态性问题
- 增强基于 XML class_id的反序列化
- 提升反序列化对象具有 nan 或 -nan 值
- 在 cpp 中的平面缓冲区中序列化对象
- 每次进行继承时都需要提升::序列化::base_object吗?
- 如何在 c++ 非托管代码中反序列化 byte[] 的 json 字符串?
- 提升序列化 1:73 的向后兼容性问题
- 将 boost 序列化对象的 asio::streambuf 表示转换为 Beast 的 DynamicBody req.body()
- 为什么 nlohmann/json 序列化 "null" 而不是在 double 上"0"?
- 如何反序列化数组?
- 如何使用提升序列化?
- 流增加.序列化档案
- 升级与二进制档案armv7的Boost序列化兼容性到arm64