C++淺析序列數(shù)據(jù)封裝與優(yōu)化實現(xiàn)方法
一、說明
用于優(yōu)化的包裝函數(shù):本節(jié)介紹包裝函數(shù)以優(yōu)化序列化過程。這些函數(shù)標(biāo)記對象以允許 Boost.Serialization 應(yīng)用某些優(yōu)化技術(shù)。
二、示范和代碼
示例 64.14。在沒有包裝函數(shù)的情況下序列化數(shù)組
#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();
}
示例 64.14 使用沒有任何包裝函數(shù)的 Boost.Serialization。該示例創(chuàng)建值 22 serialization::archive 11 0 0 3 0 1 2 并將其寫入字符串。使用包裝函數(shù) boost::serialization::make_array(),寫入的值可以縮短為以下字符串:22 serialization::archive 11 0 1 2。
示例 64.15。使用包裝函數(shù) make_array() 序列化數(shù)組
#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 ()函數(shù)需要地址和數(shù)組的長度。 由于長度是硬編碼的,所以它不需要作為boost::array類型的一部分序列化。
換個說法就是:boost::serialization::make_array() 需要數(shù)組的地址和長度。但是,因為它是預(yù)先知道的,所以不需要將長度序列化為數(shù)組的一部分。
任何時候,如果boost::array或std::vector包含一個可以直接序列化的數(shù)組,都可以使用這個函數(shù)。 其他一般需要序列化的屬性不能被序列化。
另一個 Boost.Serialization 提供的封裝函數(shù)是boost::serialization::make_binary_object ()。 與boost::serialization::make_array ()類似,它也需要地址和長度。boost::serialization::make_binary_object ()函數(shù)只是為了用來序列化沒有底層結(jié)構(gòu)的二進(jìn)制數(shù)據(jù),而boost::serialization::make_array ()是用來序列化數(shù)組的。
只要 std::array 或 std::vector 等類包含可以直接序列化的數(shù)組,就可以使用 boost::serialization::make_array()。跳過通常也會被序列化的其他成員變量(參見示例 64.15)。
Boost.Serialization 還提供包裝器 boost::serialization::make_binary_object()。類似于 boost::serialization::make_array(),此函數(shù)需要一個地址和一個長度。 boost::serialization::make_binary_object() 僅用于沒有底層結(jié)構(gòu)的二進(jìn)制數(shù)據(jù),而 boost::serialization::make_array() 用于數(shù)組。
到此這篇關(guān)于C++淺析序列數(shù)據(jù)封裝與優(yōu)化實現(xiàn)方法的文章就介紹到這了,更多相關(guān)C++序列數(shù)據(jù)封裝與優(yōu)化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++ boost::asio編程-異步TCP詳解及實例代碼
這篇文章主要介紹了C++ boost::asio編程-異步TCP詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下2016-11-11
C語言經(jīng)典算法例題求100-999之間的“水仙花數(shù)”
本文的主要內(nèi)容,設(shè)計一個程序,找出100-999之間的“水仙花數(shù)”,需要的朋友可以參考下2015-07-07
C++實現(xiàn)LeetCode(169.求大多數(shù))
這篇文章主要介紹了C++實現(xiàn)LeetCode(169.求大多數(shù)),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
C語言數(shù)據(jù)結(jié)構(gòu)之單鏈表的實現(xiàn)
鏈表是一種物理存儲結(jié)構(gòu)上非連續(xù)、非順序的存儲結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的。本文將用C語言實現(xiàn)單鏈表,需要的可以參考一下2022-06-06
C/C++ 中sizeof(''a'')對比詳細(xì)介紹
這篇文章主要介紹了C/C++ 中sizeof('a')的值對比詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2017-02-02
C++11新特性“=default”,“=delete”的使用
=default、=delete 是C++11的新特性,分別為:顯式缺省(告知編譯器生成函數(shù)默認(rèn)的缺省版本)和顯式刪除(告知編譯器不生成函數(shù)默認(rèn)的缺省版本),本文就來介紹一下如何使用2021-05-05

