日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++序列化使用

發布時間:2023/12/31 c/c++ 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++序列化使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

error C2248 無法訪問私有成員 :原因 ifstream 作為參數必須傳引用!


(1):C++使用STL序列化:原文鏈接:http://blog.csdn.net/pandaxcl/article/details/649682

在用C++編寫應用程序的過程中,經常涉及到序列化的問題,但是序列化的問題通常都 會有非常繁瑣的過程代碼需要書寫,本文中就是通過簡單的步驟實現了程序的序列化問題 ,簡單直接,和其它的序列化方案有著很大的不同。 首先來看看簡單的數據寫入文件和從文件讀入數據的代碼: 特別注解:本人特別喜歡用STL來書寫代碼,一方面是便于移植,但是另一方卻是在于 用STL書寫的代碼簡單直接,可讀性好。如果還不熟悉STL,本文則不大適合你:)#endif #if CODE1//模擬程序序列化的簡單代碼 #include <iostream>//cout #include <fstream>//ofstream,ifstream #include <vector>//vector #include <iterator>//ostream_iterator,istream_iterator,back_inserter #include <numeric>//partial_sum #include <algorithm>//copy #include <string> #include <sstream> using namespace std;//簡化代碼的書寫,經std名字空間成為默認名字空間 int main() {{//從程序序列化到文件vector<int> v(5,1);//[1,1,1,1,1]partial_sum(v.begin(),v.end(),v.begin());//[1,2,3,4,5]ofstream out("data.txt");//生成文件輸出流//將數組v中的數據全部輸出到文件流中,這種操作在C++中成為文件操作//在這里暫時稱為序列化到文件操作。實際上這里為了簡單序列化的格式//為文本文件格式。如果需要其它的格式完全可以通過自定義輸出流游標//的方式,或者重載運算符operator<<和operator>>實現不同的序列化格//式。可以參見本人的其它相關文檔。copy(v.begin(),v.end(),ostream_iterator<int>(out," "));}{//從文件序列化到程序vector<int> v;//模擬應用程序中數據ifstream in("data.txt");//建立輸入流//下面的這行代碼從文件中提取數據到v中,模擬了應用程序的序列化過程copy(istream_iterator<int>(in),istream_iterator<int>(),back_inserter(v));//下面的這行代碼僅僅只是為了顯示是否真的被序列化到了程序中copy(v.begin(),v.end(),ostream_iterator<int>(cout," "));}return 0; }//該程序的輸出如下: /******************************************************************************* 1 2 3 4 5 *******************************************************************************/ //data.txt中的內容如下: /******************************************************************************* 1 2 3 4 5 *******************************************************************************/#endif//CODE1

(2):第二種方式:使用POST++ 類庫

信息科技第一門戶:

原文鏈接:http://www.atcto.net/Tech/C/2012-10-10/C,12101014524800000002.html

C++精彩博客系列:http://blog.chinaunix.net/topic/Cjishu/


(3) Boost.Serialization

鏈接介紹:http://zh.highscore.de/cpp/boost/serialization.html

輕量序列化介紹:http://blog.csdn.net/fhxpp_27/article/details/8556948

Boost.Serialization可以創建或重建程序中的等效結構,并保存為二進制數據、文本數據、XML或者有用戶自定義的其他文件。該庫具有以下吸引人的特性:

  • 代碼可移植(實現僅依賴于ANSI C++)。
  • 深度指針保存與恢復。
  • 可以序列化STL容器和其他常用模版庫。
  • 數據可移植。
  • 非入侵性。
原文鏈接: http://www.cnblogs.com/lanxuezaipiao/p/3703988.html


(4):使用MessagePack進行序列化

原文鏈接:http://www.tuicool.com/articles/qMrayai

msgpack官方主頁:http://msgpack.org/

github主頁:https://github.com/msgpack/msgpack

序列化自定義類型:msgpack已支持了很多的標準類型,但有時我們會自己定義新的類型,這時,我們必須對新類型做某些修改,以使msgpack可以操作它。

另外,如果你的類型中含有低層指針,則還需要進行一些處理,否則,msgpack只會進行淺拷貝,無法序列化指針所指向的內存數據。

假設我們原本的類型如下:

struct Foo {int i;string str;char* data; };

那么要讓msgpack操作它,應修改為如下結構:

struct Foo {int i;string str;// 原始指針類型,內部封裝了pack_raw和pack_raw_body方法msgpack::type::raw_ref data;MSGPACK_DEFINE(i, str, data); };1 /*2 * msgpack C++試驗:序列化/反序列化自定義數據結構.3 * Author: 趙子清4 * Blog: http://www.cnblogs.com/zzqcn5 * */6 7 8 #include <msgpack.hpp>9 #include <string> 10 #include <cstring> 11 #include <iostream> 12 using namespace std; 13 14 15 struct Foo 16 { 17 int i; 18 string str; 19 // 原始指針類型,內部封裝了pack_raw和pack_raw_body方法 20 msgpack::type::raw_ref data; 21 22 MSGPACK_DEFINE(i, str, data); 23 }; 24 25 26 int main(int argc, char** argv) 27 { 28 Foo f; 29 f.i = 4; 30 f.str = "hello world"; 31 const char* tmp = "msgpack"; 32 f.data.ptr = tmp; 33 f.data.size = strlen(tmp) + 1; 34 35 msgpack::sbuffer sbuf; 36 msgpack::pack(sbuf, f); 37 38 msgpack::unpacked unpack; 39 msgpack::unpack(&unpack, sbuf.data(), sbuf.size()); 40 41 msgpack::object obj = unpack.get(); 42 43 Foo f2; 44 obj.convert(&f2); 45 46 cout << f2.i << ", " << f2.str << ", "; 47 cout << f2.data.ptr << endl; 48 49 return 0; 50 }

?輸出結果:

4, hello world, msgpack


(5):自己編寫序列化代碼

由于C++庫的開放性差,彈性小,不能用于自己的結構體map,最后還是自己專門為自己的結構體寫了序列化代碼


總結

以上是生活随笔為你收集整理的C++序列化使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。