1、シリアル化をしているのですか?
それは単にメモリ内にさまざまなオブジェクトの状態を保存することで、読み出したオブジェクトの状態を保存することができます。あなたがオブジェクトの状態を保存する方法は、独自のさまざまなを使用することができ、が、
しかし、Javaが提供するメカニズムは、あなた自身よりもオブジェクトの保存の良い状態を与える必要があり、それがシリアライズされます。
2、どのような下の状況はシリアライズする必要があります
あなたは、時間内のファイルやデータベースにメモリ内のオブジェクトを保存したい場合は、
あなたは、ネットワーク上に送信直列化オブジェクトに使用する場合は、
あなたは、RMIでオブジェクトを転送したい場合には、
オブジェクトの直列化の実装は、何が起こったのか?3、
標的配列の非存在下で、スタックに格納されている各(ヒープ)は、対応する状態(状態)を有するような、すなわち、インスタンス変数(インスタンスariable):
1フーMYFOO =新しいはFoo();
2 myFoo.setWidth(37)。
3 myFoo.setHeight(70)。
次のコードシーケンスは、インスタンス変数MYFOO物体(37,70)の幅と高さの値がfoo.serは、ファイルに保存し、後でそれができることをされた場合
、文書、再ヒープから読み出すこと元のオブジェクトを作成しました。
保存時間がないだけで、オブジェクトのインスタンス変数の値を保存し、JVMは、まだ元のオブジェクトを復元するために、このようなクラスの種類などの情報をいくつかの小さな量を、保存します。
1たFileOutputStream FS =新たFileOutputStream( "foo.ser")。
2 ObjectOutputStreamのOS =新しいObjectOutputStreamの(FS)。
3 os.writeObject(MYFOO)。
4にos.close();
ステップ4、(ファイルを保存するために)直列化を実装
FileOutputStreamを作ります
FileOutputStream FS =新しいのFileOutputStream( "foo.ser");
ObjectOutputStreamのを作ります
ObjectOutputStreamのOS =新しいObjectOutputStreamの(FS)。
オブジェクトを書き込みます
オブジェクトを閉じます
図5に示すように、図示の
輸入java.io. *;
パブリッククラスボックス実装Serializableを{
プライベートint型の幅;
プライベートint型の高さ。
公共無効にsetWidth(int型の幅){
this.width =幅;
}
ます。public void setHeightメソッド(int型高さ){
this.heightは、高さ=。
}
パブリック静的無効メイン(文字列[] args){
ボックスmyBoxは、新しいボックス()=;
myBox.setWidth(50)。
myBox.setHeight(30)。
{試します
FileOutputStream FS =新しいのFileOutputStream( "foo.ser");
ObjectOutputStreamのOS =新しいObjectOutputStreamの(FS)。
os.writeObject(myBox)。
os.close();
}キャッチ(例外例){
ex.printStackTrace();
}
}
}
6、約メモ
親クラスが実装シリアル化サブクラスが自動的にシリアライズ)、明示的な実装シリアライズ;
B)オブジェクトインスタンス変数参照他のオブジェクトだけでなく、オブジェクト参照の配列;シリアライズオブジェクト
c)は、すべてのオブジェクトは、多くの理由が存在するしない理由として,,シリアル化することができない
次のような
オブジェクトは、プライベート、パブリック、および他のフィールドを持つような理由1.セキュリティ、Aに転送しますオブジェクト、
プロセスの順序で送信例えば書面、等として、またはRMI送信によっては、このドメインの民間及び他の目的は、保護されていません。
2.そのようなソケット、スレッドクラスなどのリソースの割り当ての理由、あなたはシリアライズすることができた場合、送信または保存され、
これを達成するために、それらにリソースの再割り当てすることはできませんが、必要もありません
バイト配列への完全にオブジェクトに、輸送を容易にします。
全体的にしっかりとパッケージを郵送粉末に押し込ま音量が大きすぎるので、あなたは、クッキーの箱を送信するように、これは、アクションのシーケンスです。
しかし、JAVAのシーケンスが完全に復元されます。