序列化,反序列化有没有人实现过这这个功能:
对于struct A,序列化后会生成一个极其长的byte stream,比如1TBytes大小。
然后把这个1T写入存储。
反序列化的时候是:void deserialize(void *buf, size_t length, struct A &dst);
需要先读出这个1T大小的buffer,然后调用deserialize()函数恢复dst。
有时候1T太大了,如果能“分段反序列化”:
cursor_type cursor;
while(!cursor.done()){
auto [buf, len] = read_1_MByte_from("saved_1T_file", 1MB);
cursor = deserialize(buf, len, dst, cursor);
}
引入一个cursor变量,每次从文件读出一部分,反序列化struct A中的一部分,循环直到显示cursor已经被全部序列化完毕。
序列化时候也一样,每次从struct A中序列化一部分,压缩/存储,然后序列化下一部分,压缩/存储。
通过cursor的形式,把任何支持serialize/deserialize的struct都变成一个带cursor的byte stream view,岂不美哉。
--
修改:allegro FROM 158.140.1.*
FROM 158.140.1.*