草庐IT

Pickle反序列化

全部标签

c++ - Boost 序列化加载失败并抛出异常

很长一段时间以来,我一直在努力使这项工作成功。在我的项目中,有6个类正在使用boost中的确切教程通过实现模板函数序列化进行序列化。这些类是:State、guState、Policy、Action、Param、Vec3D。当我序列化并保存它们时,它工作正常。我确实得到了一个文本文件,里面有各种数字和字符串。没有提示,没有警告,没有抛出异常。唯一的情况是,如果我尝试序列化一个类的指针成员,空洞进程就会变成僵尸。所以我不尝试这样做,保存工作。当我尝试加载时,我得到:terminatecalledafterthrowinganinstanceof'boost::archive::archiv

c++ - Boost::serialization - 如何序列化需要数据分配但没有默认构造函数的数据结构?

如问题标题所示-我需要序列化指向每个其他数据结构的复杂网络,并由可能没有默认构造函数的类表示。这些类通常有一个vectorofpointers或vectorofpairs。我认为简单地分配sizeof(SomeClass)的内存,然后用序列化例程填充它是有意义的,但这不知何故会导致与字符串相关的未初始化内存问题(resize()失败,可能未初始化的字符串对象是不愿意工作)。示例代码如下所示:friendclassboost::serialization::access;templatevoidsave(Archive&ar,constunsignedintversion)const{i

c++ boost序列化类相互引用

我是C++boost的新手,所以这个问题可能很基础:如何序列化两个用指针相互引用的类。例如:classA;classB;classA{public:...private:doublea;vectorb;}classB{public:...private:intb;lista;}A类有一个包含指针B*的私有(private)vector,而B类有一个包含A*的私有(private)列表。特别是通过反序列化会有问题(指针!)。有人知道吗? 最佳答案 Boost.Serialization将很好地处理指针的循环引用,感谢objecttra

c++ - 从序列化数据中查找 Protocol Buffer 消息类型

我有一些二进制数据,它是通过序列化一个谷歌ProtocolBuffer类获得的。我如何在运行时找出为其序列化数据的类。例如,假设我有一个类abc。我把这个类abc序列化成二进制数据。有没有什么方法可以验证这个二进制数据是通过序列化classabc,而不是其他一些类获得的?另外,如果我用xyz类的parse方法解析这个abc类的二进制数据,我怎么知道解析是否成功。 最佳答案 protobuf不包含在线路上的任何类型信息(除非您自己在protobuf外部这样做)。因此,您不能严格验证-这实际上是一件好的事情,因为这意味着类型是可互换和兼

c++ - 无法构建示例 boost 序列化

我尝试构建我在这里找到的第一个示例:Boostserializationtutorial但我得到这个错误:Undefinedsymbols:"boost::archive::archive_exception::~archive_exception()",referencedfrom:voidboost::serialization::throw_exception(boost::archive::archive_exceptionconst&)inmain.ovoidboost::archive::basic_text_iprimitive>>::load(int&)inmain.o

c++ - 如何确定通过套接字接收到的(序列化和模板化)对象是什么类型?

我正在使用googleprotobuf实现一个简单的Request/Response基于协议(protocol)。对等点可以通过socket接收两者Request和Response,(当然是serialized)作为string.我正在使用我自己的C++套接字实现,所以我实现了operator>>这样(同样适用于operator)从socket接收数据对象:...templatevoidoperator>>(M&m)throw(socks::exception){std::stringstr;if(!this->recv(str)){throwsocks::exception(">>f

c++ - Boost序列化无法恢复保存的对象

这是我类(class)的样子:#include#include#include#include//includeheadersthatimplementaarchiveinsimpletextformat#include#include#includeusingnamespacestd;usingnamespaceboost;classouter{friendclassboost::serialization::access;public:inta;classinner{friendclassboost::serialization::access;public:inta;inner(

c++ - 如何简单地序列化复杂结构并在 Qt 中通过网络发送它们

我正在创建一个客户端服务器应用程序,现在我正在处理一种最简单的方法来序列化一些类,交付给另一端,然后放回我以后可以使用的类。我意识到这并不简单,有些人可能会说用C或C++等低级语言是不可能的,但实际上可以通过大量编码实现。我想知道是否其他人已经没有为此创建一个解决方案,它是可移植的并且可以工作,所以我不需要重新发明轮子。目前我的解决方案(可能有点太复杂):每个要序列化和反序列化的类都继承自抽象类Serializable,它包含两个函数:QHashToHash();voidLoadHash(QHashhash);第一个函数创建一个包含所有公共(public)和私有(private)变量的

c++ - Boost序列化多个对象

我正在尝试构建持久性模块,并且正在考虑序列化/反序列化我需要持久化到文件的类。使用Boost序列化可以将多个对象写入同一个文件吗?我如何读取或遍历文件中的条目?如果良好的性能是一个条件,Googleprotocolbuffers可能更适合我? 最佳答案 如果不能序列化多个对象,序列化库就不会很有用。如果您阅读他们的veryextensivedocumentation,您会找到所有答案。. 关于c++-Boost序列化多个对象,我们在StackOverflow上找到一个类似的问题:

c++ - Boost Serialize - 以自定义方式序列化数据

如果我使用Boost序列化来序列化一个整数:#include#includeintmain(){boost::archive::text_oarchiveoa(std::cout);inti=1;oa结果如下:22serialization::archive51现在我很好奇是否以及如何改变某些数据被序列化的方式。数据不需要反序列化,所以如果这不再可能,也不是不这样做的阻碍理由。假设上面的代码应该创建以下输出:整数11(增加wordinteger,值会增加10,archive-header不会被整合。)这可能吗?如何才能实现?BoostSerialization是否能够让用户在不修改Se