您的位置:首页 > 其它

boost序列化问题(一)

2012-11-15 12:38 232 查看
最近在折腾boost序列化的问题,看了不少网上的资料,官方文档也看了些。具体的也不过说了,还是说一下我应用的情况,以及遇到的问题吧。额,当时给自己整理思路的,没想着写得太详细。

boost序列化分为二进制,文本,xml三种的。xml直接忽略,没其他的原因,因为我不懂。一开始为了提高效率,使用了二进制形式的,但是测试的时候很好。可是用的时候就出现问题了。因为我需要将参数结构体序列化发送到服务端,服务端接受后再反序列化,根据参数调用对应的函数。这过程中遇到第一个问题,尼玛,我数据很顺利的发过去了,可是那边接受反序列化一直都是失败,甚至直接在定义反序列化类,boost::archive::binary_iarchive类的时候就给我抛异常了,经过我各种折腾终于发现,这厮,boost::archive::binary_iarchive定义这个类之间一定要先存在boost::archive::binary_oarchive类,
好吧,我忍。定义了一个莫名其妙的boost::archive::binary_oarchive类,好了,定义的时候不报错了。可是在反序列化,输出的时候就给我报错了,大概意思就是类型不匹配吧。可是,可是,我发现这东西,在客户端那边可以很正常的反序列化。我纠结半天之后,得出结论,尼玛,估计是我将发送过来的字符输入到数据流中,但其实并没有完整的构造出一个boost::archive::binary_oarchive序列化对应的数据流。我真的要掩面而哭,当天晚上纠结到很晚,最后逼得浑身冒火的时候,灵光以上,好像在哪一篇文档中,看到二进制的序列化是不可以移植的。算了,不管不可移植是指什么,但是我决定不再折腾这种了。立马改用text文本的。好家伙,这东西好啊,既不需要定义一个boost::archive::text_oarchive类,就可以直接使用boost::archive::text_iarchive类了,并且反序列化完全正常。于是我乐呵呵的,下班回家,洗洗睡了。

第二天,正准备大搞一场的时候,问题又出现。这次服务端反序列化没问题了,可是客户端发过来的数据反序列化又挂了。得,又纠结了一上午,最后终于发现,是因为,我这人太懒,没有重新定义数据流,直接将原来的clear了,顺便还.str("")了就是传说中唯一清空数据流的方法。可是发现,我将收到的字符串输入进去以后,不能序列化,又给我抛一个数据流异常。后来重新定义了一个数据流,将字符串输入进去,就正常了。最后搞完的时候,我只想说,真是悲剧啊。

这么经典的错误,为毛网上都没有看到资料说明一下,掩面痛哭。因为这个,导致我进度明显落后,坐等挨批!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: