とても使いやすい Boost の serialization

Slides:



Advertisements
Similar presentations
アルゴリズムとプログラミン グ (Algorithms and Programming) 第6回:クラスとインスタンス クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い 方 クラスの宣言 アクセス修飾子 インスタンスの生成.
Advertisements

山元進.  for 文  while 文  do ~ while 文  文のネスト  break 文  continue 文.
プログラミング第5回 1 while ループ 文字列の操作
プログラミング実習 1 ・ 2 ク ラス 第 2 週目 担当教員 : 渡邊 直樹. 課題 2 ● 2 × 2型行列の固有値, 固有ベクトルを求め る EigMatrix.java というプログラムを作成せ よ。 ● 行列の各要素はコマンド・プロンプトから入力 ● 計算した結果もコマンド・プロンプトに表示.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
アルゴリズムとデータ構造 2012年6月27日
Applet 岡部 祐典 鈴木 敬幸.
プログラミング基礎I(再) 山元進.
WebサービスII (第10回) 2007年11月28日 植田龍男.
とても使いやすい Boost の serialization
プログラミング基礎I(再) 山元進.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
String - 文字列 2009年10月9日 7ADD2116 佐藤洋輔.
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
WebサービスII (第8回) 2007年11月14日 植田龍男.
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
第20章 Flyweight ~同じものを共有して無駄をなくす~
C#とC++とオブジェクト指向 上甲 健史.
大岩 元 慶応大学環境情報学部 二分木 データ構造とプログラミング(10) 大岩 元 慶応大学環境情報学部
オブジェクト指向入門.
11.6 ランダムアクセスファイル 11.7 StreamTokenizerクラス
プログラミング言語入門 手続き型言語としてのJava
第9章 例外処理,パッケージ 9.1 例外処理 9.2 ガーベッジコレクション.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗号技術 ~JAVAプログラム①~ (5週目)
画像処理プログラムの説明.
オブジェクト指向 プログラミング 第七回 知能情報学部 新田直也.
10-1 SAXの概要 10-2 Saxプログラミングの基礎 10-3 saxのプログラム例
Javaによる Webアプリケーション入門 第2回
7.4 intanceof 演算子 7.5~7.9パッケージ 2003/11/28 紺野憲一
もっと詳しくArrayクラスについて調べるには → キーワード検索
アルゴリズムとデータ構造1 2005年6月24日
アルゴリズムとデータ構造 2010年6月21日
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
フロントエンドとバックエンドのインターフェース
NGK2013B – 名古屋合同懇親会 2013忘年会 – Kouji
アルゴリズムとデータ構造1 2006年7月11日
アルゴリズムとデータ構造 2011年6月23日
C言語ファミリー C# 高級言語(抽象的) Java オブジェクト指向 C++ C 機械語(原始的)
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
Boostのスマートなポインタを使ってみる
C#プログラミング実習 第3回.
計算機プログラミングI 第3回 プリミティブ値 クラスメソッド クラス変数 式と演算 変数の利用
暗号技術 ~JAVAプログラム②~ (6週目)
アルゴリズムとデータ構造1 2009年6月15日
アルゴリズムとデータ構造 2012年6月25日
さまざまなプログラミング言語, オンライン開発環境
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向 プログラミング 第四回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
cp-3. サブクラス,継承 (C++ オブジェクト指向プログラミング入門)
cp-2. 属性,アクセサ (C++ オブジェクト指向プログラミング入門)
cp-1. クラスとメソッド (C++ オブジェクト指向プログラミング入門)
アルゴリズムとデータ構造 2010年6月17日
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
7.集合 7.1 集合とは [集合と要素] 関東の都道府県 群馬県 栃木県 要素 埼玉県 茨城県 東京都 千葉県 神奈川県
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

とても使いやすい Boost の serialization Zegrahm

シリアライズ(直列化)とは何か? もう少しわかりやすく表現すると オブジェクトデータをバイト列やXMLフォーマットに変換すること。

何に使う オブジェクトの表すデータを、ファイルとしてセーブしたり、ネットワークで送信したりする事が出来るようになる。 シリアライズ(直列化)とは何か? 何に使う オブジェクトの表すデータを、ファイルとしてセーブしたり、ネットワークで送信したりする事が出来るようになる。 作成されたバイト列やXMLフォーマットは、直列化復元(デシリアライズ)によって、元のオブジェクトに復元できる。

C#でのXMLのシリアライズ public class SampleData // シリアライズするデータ { public int no; public string name; public string nickName; public bool bentouFlg; public bool shinbokuFlg; } static void Main(string[] args) { var sd = new SampleData() { no = 1, name = "清水政宏", nickName = "zegrahm", bentouFlg = false, shinbokuFlg = true }; DataSave(sd); static void DataSave(SampleData sd) { var serializer = new XmlSerializer(typeof(SampleData)); using (var fs = new FileStream("SampleData.xml", FileMode.Create)) { serializer.Serialize(fs, sd);

C#でのXMLのデシリアライズ static void Main(string[] args) { SampleData sd; DataLoad(out sd); Console.WriteLine("no: {0}", sd.no); Console.WriteLine("name: {0}", sd.name); Console.WriteLine("nickName: {0}", sd.nickName); Console.WriteLine("bentouFlg: {0}", sd.bentouFlg ? "弁当あり" : "弁当なし"); Console.WriteLine("shinbokuFlg: {0}", sd.shinbokuFlg ? "親睦会参加" : "親睦会不参加"); } static void DataLoad(out SampleData sd) { var serializer = new XmlSerializer(typeof(SampleData)); using (var fs = new FileStream("SampleData.xml", FileMode.Open)) { sd = (SampleData)serializer.Deserialize(fs);

<no>1</no> <name>清水政宏</name> 作成したXML <?xml version="1.0"?> <SampleData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <no>1</no> <name>清水政宏</name> <nickName>zegrahm</nickName> <bentouFlg>false</bentouFlg> <shinbokuFlg>true</shinbokuFlg> </SampleData>

C#やJavaでシリアライズ・デシリアライズについて

C++では、リフレクション機能が存在しないため、通常なら出来ない。 しかし、MFCやBoostライブラリには、シリアライズを行うためのクラスが用意されている。 ただし、C++では、リフレクションが存在しないため、シリアライズを行う処理自体をコードで記述する必要がある。

MFCでの例(対象クラスの定義 -ヘッダー) // ヘッダー class SampleData : public CObject { DECLARE_SERIAL(SampleData) public: SampleData(); virtual ~SampleData(); virtual void Serialize(CArchive& archive); int no; CString name; CString nick_name; bool bentou_flg; bool shinboku_flg; };

MFCでの例(対象クラスの定義 -ソース) IMPLEMENT_SERIAL(SampleData, CObject, 1) SampleData::SampleData() {} SampleData::~SampleData() {} void SampleData::Serialize(CArchive& ar) { CObject::Serialize(ar); if (ar.IsLoading()) { ar >> no >> name >> nick_name >> bentou_flg >> shinboku_flg; } else { ar << no << name << nick_name << bentou_flg << shinboku_flg; }

MFCでシリアライズを行う事が出来るが、これでは普通にセーブ・ロードしているのと、あまりかわらない。

Boostのシリアライズ(クラス定義) class SampleData { public: SampleData(); int no; string name; string nick_name; bool bentou_flg; bool shinbokukai_flg; private: friend class boost::serialization::access; template<class Archive> void serialize(Archive& ar, unsigned int ver) { ar & no & name & nick_name & bentou_flg & shinbokukai_flg; } };

Boostシリアライズコード void DataSave(const SampleData& sd) { ofstream file("SampleData.txt"); boost::archive::text_oarchive oa(file); oa << sd; } int main(int argc, char* argv[]) { SampleData sd; sd.no = 1; sd.name = "清水政宏"; sd.nick_name = "zegrahm"; sd.bentou_flg = false; sd.shinbokukai_flg = true; DataSave(sd); return 0;

Boostデシリアライズ void DataLoad(SampleData& sd) { ifstream file("SampleData.xml"); boost::archive::xml_iarchive ia(file); ia >> BOOST_SERIALIZATION_NVP(sd); } int main(int argc, char* argv[]) { SampleData sd; DataLoad(sd); cout << "no: " << sd.no << endl; cout << "name: " << sd.name << endl; cout << "nick_name: " << sd.nick_name << endl; cout << "bentou_flg: " << (sd.bentou_flg ? "弁当あり" : "弁当なし") << endl; cout << "shinboku_flg: " << (sd.shinbokukai_flg ? "親睦会参加" : "親睦会非参加") << endl; return 0;

シリアライズのまとめ1 その他デモ

シリアライズのまとめ2 参考URL: http://hw001.gate01.com/eggplant/tcf/cpp/boost_serialization.html