MSのVC2012でオブジェクト永続化、データの永続化?

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
びぎ

MSのVC2012でオブジェクト永続化、データの永続化?

#1

投稿記事 by びぎ » 13年前

JAVAの世界ではオブジェクト永続化、データの永続化=シリアル化?
よく耳にするんですけれども、MSのVC2012でもできるのでようか。

びぎ

Re: MSのVC2012でオブジェクト永続化、データの永続化?

#2

投稿記事 by びぎ » 13年前

ごめんなさい訂正させて下さい
誤:MSのVC2012でもできるのでようか。
正:MSのVC2010でもできるのでしょうか。

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: MSのVC2012でオブジェクト永続化、データの永続化?

#3

投稿記事 by h2so5 » 13年前

できますよ。
自分でシリアライザを書くか、あるいはBoost.serializationなどのライブラリを使う方法があります。

びぎ

Re: MSのVC2012でオブジェクト永続化、データの永続化?

#4

投稿記事 by びぎ » 13年前

ありがとうございます。
返信が遅れて大変申し訳ございません!
できればシリアライザを自分で書きたいですね。
というか、これだけのためにライブラリーを導入する気はありません。

さて、そのシリアライザに関する基本方法ですが、
プログラム実行中のobjectが占めているメモリをそのサイズ分に2進データとして
そのまま丸ごとファイルに落せばOKでしょうか。
それに、padding fieldはランダムデータとしてそのままファイルに入るのでしょうか。

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: MSのVC2012でオブジェクト永続化、データの永続化?

#5

投稿記事 by h2so5 » 13年前

びぎ さんが書きました:さて、そのシリアライザに関する基本方法ですが、
プログラム実行中のobjectが占めているメモリをそのサイズ分に2進データとして
そのまま丸ごとファイルに落せばOKでしょうか。
その方法でシリアライズできるオブジェクトは限られます。
POD(Plain Old Data)というC言語互換の型でないとまず駄目ですし、
ポインタが含まれる場合も上手くいかないでしょう。

びぎ

Re: MSのVC2012でオブジェクト永続化、データの永続化?

#6

投稿記事 by びぎ » 13年前

早速ご返答ありがとうございます。

> POD(Plain Old Data)というC言語互換の型でないとまず駄目ですし、
> ポインタが含まれる場合も上手くいかないでしょう。

これは宿命てきな事ではないでしょうか。
シリアライザって上記のような不都合を回避できるのでしょうか。
なんで?

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: MSのVC2012でオブジェクト永続化、データの永続化?

#7

投稿記事 by h2so5 » 13年前

シリアライズの例としてゲームのセーブデータを考えてみれば分かると思いますが、
セーブデータはゲームの状態の復元に必要なデータを出力しているだけで、ゲームの状態をまるごと保存してはいません。

シリアライズはオブジェクトを復元するためのデータをコンテクストに依存しない形で生成することであって、
メモリの状態をそのまま出力するということではないです。
(もちろん、オブジェクトによってはそのまま出力してもよい場合もあるでしょう)

例えば、boost::serializationではvectorなどのSTLコンテナをXMLなどに出力することができます。
復元するときはXMLを解析して、STLコンテナを作り直すわけです。

びぎ

Re: MSのVC2012でオブジェクト永続化、データの永続化?

#8

投稿記事 by びぎ » 13年前

h2so5 様
素晴らしい解説ありがとうございました!
すっきりしました。

閉鎖

“C言語何でも質問掲示板” へ戻る