Serializableシーケンス化インタフェースの役割
2421 ワード
1、シーケンス化って何?
簡単に言えば、メモリに保存されている様々なオブジェクトの状態のためです.(つまりインスタンス変数、メソッドではありません)、保存されたオブジェクトの状態を読み返すことができます.object statesを自分の様々な方法で保存することができますが、Javaはあなた自身よりもオブジェクトの状態を保存するメカニズムを提供します.それはシーケンス化です.
2、どのような場合にシーケンス化が必要か
a)メモリ内のオブジェクトの状態を1つのファイルまたはデータベースに保存したい場合.
b)ソケットでネットワーク上でオブジェクトを転送したい場合.
c)RMIを介してオブジェクトを転送したい場合.
3、1つのオブジェクトをシーケンス化するとき、いったい何が起こったのか.
シーケンス化されない前に、ヒープ(Heap)に保存されている各オブジェクトには、インスタンス変数(instance ariable)のような対応する状態(state)があります.
JAvaコード
次のコードでシーケンス化すると、MyFooオブジェクトのwidthとHeightインスタンス変数の値(37,70)はfoo.serファイルに保存されます.これにより、後でファイルから読み出し、スタックに元のオブジェクトを再作成できます.もちろん、保存時にはオブジェクトのインスタンス変数の値を保存するだけでなく、JVMはクラスのタイプなど、小さな情報を保存して元のオブジェクトを復元します
JAvaコード
簡単に言えば、メモリに保存されている様々なオブジェクトの状態のためです.(つまりインスタンス変数、メソッドではありません)、保存されたオブジェクトの状態を読み返すことができます.object statesを自分の様々な方法で保存することができますが、Javaはあなた自身よりもオブジェクトの状態を保存するメカニズムを提供します.それはシーケンス化です.
2、どのような場合にシーケンス化が必要か
a)メモリ内のオブジェクトの状態を1つのファイルまたはデータベースに保存したい場合.
b)ソケットでネットワーク上でオブジェクトを転送したい場合.
c)RMIを介してオブジェクトを転送したい場合.
3、1つのオブジェクトをシーケンス化するとき、いったい何が起こったのか.
シーケンス化されない前に、ヒープ(Heap)に保存されている各オブジェクトには、インスタンス変数(instance ariable)のような対応する状態(state)があります.
JAvaコード
Foo myFoo = new Foo();
myFoo .setWidth(37);
myFoo.setHeight(70);
次のコードでシーケンス化すると、MyFooオブジェクトのwidthとHeightインスタンス変数の値(37,70)はfoo.serファイルに保存されます.これにより、後でファイルから読み出し、スタックに元のオブジェクトを再作成できます.もちろん、保存時にはオブジェクトのインスタンス変数の値を保存するだけでなく、JVMはクラスのタイプなど、小さな情報を保存して元のオブジェクトを復元します
JAvaコード
FileOutputStream fs = new FileOutputStream("foo.ser");
ObjectOutputStream os = new ObjectOutputStream(fs);
os.writeObject(myFoo); os.close();
5、
java
import java.io.*;
public class Box implements Serializable
{
private int width;
private int height;
public void setWidth(int width){
this.width = width;
}
public void setHeight(int height){
this.height = height;
}
public static void main(String[] args){
Box myBox = new Box();
myBox.setWidth(50);
myBox.setHeight(30);
try{
FileOutputStream fs = new FileOutputStream("foo.ser");
ObjectOutputStream os = new ObjectOutputStream(fs);
os.writeObject(myBox);
os.close();
}catch(Exception ex){
ex.printStackTrace();
}
}
}
6、 a)をシーケンス する 、 の にかかわらず、 の のみを する.
b) クラスがシーケンス を すると、 クラスは にシーケンス を し、Serializableインタフェースを に する はない.
c)あるオブジェクトのインスタンス が のオブジェクトを し、そのオブジェクトをシーケンス するときも オブジェクトをシーケンス する.
d)すべてのオブジェクトがシーケンス できるわけではありません.なぜできないのかについては、 のような があります.
1.セキュリティ の は、オブジェクトがprivate、publicなどのfieldを っていること、ファイルへの き みやrmi など、 するオブジェクトに して、シーケンス されて される で、このオブジェクトのprivateなどのドメインは されません.
2. socket,threadクラスのようなリソース り ての は,シーケンス , , が であれば,それらを リソース り てすることもできず,また,このように する もない.