亲宝软件园·资讯

展开

C++浅析序列数据封装与优化实现方法

无水先生 人气:0

一、说明

用于优化的包装函数:本节介绍包装函数以优化序列化过程。这些函数标记对象以允许 Boost.Serialization 应用某些优化技术。

二、示范和代码

示例 64.14。在没有包装函数的情况下序列化数组

#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/array.hpp>
#include <iostream>
#include <sstream>
using namespace boost::archive;
std::stringstream ss;
void save()
{
  text_oarchive oa{ss};
  boost::array<int, 3> a{{0, 1, 2}};
  oa << a;
}
void load()
{
  text_iarchive ia{ss};
  boost::array<int, 3> a;
  ia >> a;
  std::cout << a[0] << ", " << a[1] << ", " << a[2] << '\n';
}
int main()
{
  save();
  load();
}

Example 64.14

示例 64.14 使用没有任何包装函数的 Boost.Serialization。该示例创建值 22 serialization::archive 11 0 0 3 0 1 2 并将其写入字符串。使用包装函数 boost::serialization::make_array(),写入的值可以缩短为以下字符串:22 serialization::archive 11 0 1 2。

示例 64.15。使用包装函数 make_array() 序列化数组

#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/array.hpp>
#include <array>
#include <iostream>
#include <sstream>
using namespace boost::archive;
std::stringstream ss;
void save()
{
  text_oarchive oa{ss};
  std::array<int, 3> a{{0, 1, 2}};
  oa << boost::serialization::make_array(a.data(), a.size());
}
void load()
{
  text_iarchive ia{ss};
  std::array<int, 3> a;
  ia >> boost::serialization::make_array(a.data(), a.size());
  std::cout << a[0] << ", " << a[1] << ", " << a[2] << '\n';
}
int main()
{
  save();
  load();
}

boost::serialization::make_array ()函数需要地址和数组的长度。 由于长度是硬编码的,所以它不需要作为boost::array类型的一部分序列化。

换个说法就是:boost::serialization::make_array() 需要数组的地址和长度。但是,因为它是预先知道的,所以不需要将长度序列化为数组的一部分。

任何时候,如果boost::arraystd::vector包含一个可以直接序列化的数组,都可以使用这个函数。 其他一般需要序列化的属性不能被序列化。

另一个 Boost.Serialization 提供的封装函数是boost::serialization::make_binary_object ()。 与boost::serialization::make_array ()类似,它也需要地址和长度。boost::serialization::make_binary_object ()函数只是为了用来序列化没有底层结构的二进制数据,而boost::serialization::make_array ()是用来序列化数组的。

只要 std::array 或 std::vector 等类包含可以直接序列化的数组,就可以使用 boost::serialization::make_array()。跳过通常也会被序列化的其他成员变量(参见示例 64.15)。

Boost.Serialization 还提供包装器 boost::serialization::make_binary_object()。类似于 boost::serialization::make_array(),此函数需要一个地址和一个长度。 boost::serialization::make_binary_object() 仅用于没有底层结构的二进制数据,而 boost::serialization::make_array() 用于数组。

加载全部内容

相关教程
猜你喜欢
用户评论