【发布时间】:2021-12-14 12:44:24
【问题描述】:
我正在使用 Boost 进行二进制序列化和反序列化的 C++ 项目。 Boost 版本 1.61 中已经存在序列化功能我使用 Boost 版本 1.77 添加了整个反序列化功能,现在我在读取二进制文件时遇到了问题。所以,我的问题是这种反序列化版本的差异如何影响这个过程?因为我无法正确读取二进制文件。
使用 Boost 版本 1.61 进行序列化的代码
#include <boost/archive/binary_oarchive.hpp>
#include <fstream>
#include <string>
class Frame{
public:
std::string str;
};
template <typename Archive>
void serialize(Archive& ar, Frame& f, const unsigned int version) {
ar& f.str;
}
uint32_t main () {
Frame f={"Frame example"};
std::ofstream ofs;
ofs.open("BinaryFile.bin",std::ios::out, std::ios::binary);
boost::archive::text_oarchive write(ofs,boost::archive::no_header);
write << f;
ofs.close();
}
使用 boost 1.77 版本进行反序列化的代码
#include <boost/archive/binary_iarchive.hpp>
#include <fstream>
#include <string>
class Frame{
public:
std::string str;
};
template <typename Archive>
void serialize(Archive& ar, Frame& f, const unsigned int version) {
ar& f.str;
}
uint32_t main () {
Frame f;
std::ofstream ofs;
ofs.open("BinaryFile.bin",std::ios::in, std::ios::binary);
boost::archive::text_oarchive read(ofs,boost::archive::no_header);
read >> f;
ofs.close();
}
这只是一个示例代码,我使用的框架不同但方法相同。
【问题讨论】:
-
您能否提供一个进行序列化和反序列化的代码的小示例,例如使用 Boost 1.61 进行序列化,而使用 Boost 1.77 的相同代码无法反序列化?
-
TL;DR : 需要两边的 boost 版本相同,否则不保证能正常工作;我过去也遇到过同样的问题,最后放弃了使用 boost。另一方面,Protobuf 应该保证一定的兼容性。
-
@Eljay 我已经添加了示例代码,您可以查看一下。
-
@pptaszni 感谢您的建议。
-
感谢您提供代码。它是否为您编译并运行?它没有为我编译。