JAVAの世界ではオブジェクト永続化、データの永続化=シリアル化?
よく耳にするんですけれども、MSのVC2012でもできるのでようか。
MSのVC2012でオブジェクト永続化、データの永続化?
-
びぎ
Re: MSのVC2012でオブジェクト永続化、データの永続化?
ごめんなさい訂正させて下さい
誤:MSのVC2012でもできるのでようか。
正:MSのVC2010でもできるのでしょうか。
誤:MSのVC2012でもできるのでようか。
正:MSのVC2010でもできるのでしょうか。
Re: MSのVC2012でオブジェクト永続化、データの永続化?
できますよ。
自分でシリアライザを書くか、あるいはBoost.serializationなどのライブラリを使う方法があります。
自分でシリアライザを書くか、あるいはBoost.serializationなどのライブラリを使う方法があります。
-
びぎ
Re: MSのVC2012でオブジェクト永続化、データの永続化?
ありがとうございます。
返信が遅れて大変申し訳ございません!
できればシリアライザを自分で書きたいですね。
というか、これだけのためにライブラリーを導入する気はありません。
さて、そのシリアライザに関する基本方法ですが、
プログラム実行中のobjectが占めているメモリをそのサイズ分に2進データとして
そのまま丸ごとファイルに落せばOKでしょうか。
それに、padding fieldはランダムデータとしてそのままファイルに入るのでしょうか。
返信が遅れて大変申し訳ございません!
できればシリアライザを自分で書きたいですね。
というか、これだけのためにライブラリーを導入する気はありません。
さて、そのシリアライザに関する基本方法ですが、
プログラム実行中のobjectが占めているメモリをそのサイズ分に2進データとして
そのまま丸ごとファイルに落せばOKでしょうか。
それに、padding fieldはランダムデータとしてそのままファイルに入るのでしょうか。
Re: MSのVC2012でオブジェクト永続化、データの永続化?
その方法でシリアライズできるオブジェクトは限られます。びぎ さんが書きました:さて、そのシリアライザに関する基本方法ですが、
プログラム実行中のobjectが占めているメモリをそのサイズ分に2進データとして
そのまま丸ごとファイルに落せばOKでしょうか。
POD(Plain Old Data)というC言語互換の型でないとまず駄目ですし、
ポインタが含まれる場合も上手くいかないでしょう。
-
びぎ
Re: MSのVC2012でオブジェクト永続化、データの永続化?
早速ご返答ありがとうございます。
> POD(Plain Old Data)というC言語互換の型でないとまず駄目ですし、
> ポインタが含まれる場合も上手くいかないでしょう。
これは宿命てきな事ではないでしょうか。
シリアライザって上記のような不都合を回避できるのでしょうか。
なんで?
> POD(Plain Old Data)というC言語互換の型でないとまず駄目ですし、
> ポインタが含まれる場合も上手くいかないでしょう。
これは宿命てきな事ではないでしょうか。
シリアライザって上記のような不都合を回避できるのでしょうか。
なんで?
Re: MSのVC2012でオブジェクト永続化、データの永続化?
シリアライズの例としてゲームのセーブデータを考えてみれば分かると思いますが、
セーブデータはゲームの状態の復元に必要なデータを出力しているだけで、ゲームの状態をまるごと保存してはいません。
シリアライズはオブジェクトを復元するためのデータをコンテクストに依存しない形で生成することであって、
メモリの状態をそのまま出力するということではないです。
(もちろん、オブジェクトによってはそのまま出力してもよい場合もあるでしょう)
例えば、boost::serializationではvectorなどのSTLコンテナをXMLなどに出力することができます。
復元するときはXMLを解析して、STLコンテナを作り直すわけです。
セーブデータはゲームの状態の復元に必要なデータを出力しているだけで、ゲームの状態をまるごと保存してはいません。
シリアライズはオブジェクトを復元するためのデータをコンテクストに依存しない形で生成することであって、
メモリの状態をそのまま出力するということではないです。
(もちろん、オブジェクトによってはそのまま出力してもよい場合もあるでしょう)
例えば、boost::serializationではvectorなどのSTLコンテナをXMLなどに出力することができます。
復元するときはXMLを解析して、STLコンテナを作り直すわけです。