作成日 2008/6/9
最終更新日 2008/6/9
オブジェクトのシリアライズとデシリアライズ
このページではオブジェクトのシリアライズ(※1)とデシリアライズについて説明します。
-----
※1:Javaはシリアライズを言語機能の一部として備えていますが、VBAはそうではありません。なので、自分でコードを書かなくてはなりません。疲れるよ・・・。
シリアライズとはオブジェクトを直列化することなのですが、これではさっぱり判らない。
シリアライズとは、オブジェクトをバイト配列に変換することです(※1)。バイト配列からオブジェクトに戻す(復元する)ことはデシリアライズと言います(※2)。
シリアライズのイメージ図(図1)を作成しましたので、見てください。
図1 シリアライズのイメージ図(※3)
-----
※1:XMLに変換することもシリアライズということもあります。
※2:オブジェクトをバイト配列に変換することと、バイト配列からオブジェクトを復元することの両方をひっくるめてシリアライズということもあります。
※3:これはイメージ図です。この変換方式はだるまが説明用に適当に考えたものです。以下のような細かいこと(?)は考えないでください。細かいことを知りたい人は
参考文献
の3番を見てください。
- これだと、バイト配列からオブジェクトを復元するときは、バイト配列の構造を知ってないといけなくなる。構造を知らなくても復元できるようにならないの?
それに、これだと、後から構造を変えるのが大変な気がするけど。
- オブジェクトの参照が複雑な場合大丈夫か?(階層構造が深い場合、循環参照、自己参照がある場合は大丈夫か?)
- セキュリティは考えなくて良いのか?(例えば、暗号化しなくていいの?)
一般的には以下のときに使用します。
あ、ちなみに、シリアライズの乱用は危険ですので注意してください(参考文献の4番を参照してください)。
- 簡易的なオブジェクト(データ)の保存するとき
ただし、例えばファイルに保存したとき、ファイルの中身を人間が見て判るような形かというとそうではありません。そのため、保存に使えるといっても、保存されたものを人間が見たり修正したりするところではシリアライズは向いていません(※1)。
- ネットワークでデータを送信するとき
まあ、バイトの配列(テキストでも良いが)にしないと、送信できないからね・・・。
- オブジェクトをディープコピー(※2)したい場合にわざとシリアライズすることがあるようです。
このページを作成するのに参考にしたページです。
このページの利用によって発生した、いかなる損害について、このホームページの作成者は責任を負いません。
このページの間違いや嘘を見つけた方、このページに書いて欲しい情報がある方は
メールをお願いします。
Microsoft 、Windows 、Visual Basic および Excel は米国Microsoft
Corporationの米国およびその他の国における登録商標または商標です。
ここではExcel® をエクセル、Visual Basic® for Applications をVBAと表記する場合があります。
Mac 、Mac OS 、Mac OS X は米国Apple Computer,Inc.の登録商標または商標です。
その他、社名および商品名、システム名称などは、一般に各社の商標または登録商標です。
Sun、Sun Microsystems、サンのロゴマーク、Java、及び、Sun/Solaris/Java に関連するすべての商標およびロゴマークは米国 Sun Microsystems, Inc. の米国およびその他の国における商標または登録商標です。
このホームページの作成者はこれらの会社とはいっさい関係がありません。