我正在寻找的是类似于 RakNet 中内置的序列化库(我不能在我当前的项目中使用)。我需要能够在本地将二进制流保存/加载为自定义格式,并通过网络发送它们。网络部分已解决,但我真的不想编写自己的方法将所有不同类型的数据序列化为二进制文件,特别是因为如果没有任何压缩方法,效率会很低。
这是一些类似于 RakNet 比特流工作方式的伪代码,这与我正在寻找的内容一致:
class Foo
{
public:
void Foo::save(BitStream& out)
{
out->write(m_someInt);
out->write(m_someBool);
m_someBar.save(out);
// Alternative syntax
out->write<int>(m_someInt);
// Also, you can define custom serialization for custom types so you can do this...
out->write<Bar>(m_someBar);
// Or this...
out->write(m_someBar);
}
void Foo::load(BitStream& in)
{
in->read(m_someInt);
in->read(m_someBool);
in->read(m_someBar);
}
private:
int m_someInt;
bool m_someBool;
Bar m_someBar;
};
是否有任何免费的 C++ 库允许这样的事情?我基本上只是想要一些东西将我的数据打包成二进制文件,并将其压缩以进行序列化,然后将其解压缩回二进制文件,我可以将其反馈回我的数据中。
编辑,添加更多信息:
不幸的是,Google Protocol Buffers 或 Boost Serialization 都不能满足我的需要。两者都希望序列化对象成员,我需要简单地序列化数据。例如,假设我有一个std::vector<Person>
,并且该类Person
有一个std::string
for 名称,以及其中的其他数据,但我只想序列化和反序列化它们的名称。使用 Google 协议缓冲区,它希望我将 Person 对象作为一个整体提供给它以进行序列化。但是,我可以通过 Boost 序列化来实现,但是如果我有另一个需要整个Person
要序列化,没有办法做到这一点,您要么必须序列化所有序列,要么不序列化。基本上我需要相当多的灵活性来制作二进制流,但是我认为合适,我只想要一个库来帮助我管理从流中读取和写入二进制数据,以及压缩/解压缩它。