JAvaでのシーケンス化とはどういう意味ですか?


質問:
JAvaでのシーケンス化とはどういう意味ですか?何のメリットがありますか?
回答:
私の答え:
Javaメモリのオブジェクトの状態と値は記録されず保存されません.
Javaメモリにメモリ内のオブジェクトのステータスとその値を記録して保存するには、「シーケンス化」と呼ばれます.
オブジェクトシーケンス化はjava自身がオブジェクト状態を記録するメカニズムである.
シーケンス化されたオブジェクトは、1つのファイルまたはデータベースに保存したり、ソケットでネットワーク上で転送したりすることができます.
メソッド:オブジェクトはSerializableインタフェースを実装します.
----------------------------------------
参考読書(一):
any class implementing java.io.Serializableはシーケンス化可能です.
シーケンス可能なclass instances
Java ioのwrite Objectでストリームを書き込むことができ、
Java ioのread Objectも共通で読み返します.

class Student inplement Serializable
{
   String name;
   int age;
   char gender;
}
//now if you have Student stud = ....;
//you can save the student instance stud in a file as the object instance itself //and read back as an instance.
new ObjectOutputStream(new FileOutputStream("..")).writeObject(stud);
Student stud = (Student)new ObjectInputStream(new FileInputStream("..")).readObject();


引用:
http://bbs.csdn.net/topics/30434634
--------------------------------------------------
参考読書(二):
1、シーケンス化って何?
  簡単に言えば、メモリに保存されている様々なオブジェクトの状態を、保存されているオブジェクトの状態を読み返すためです.自分の様々な方法でObject Statesを保存することができますが、Javaはあなた自身よりもオブジェクトの状態を保存するメカニズムを提供します.それはシーケンス化です.
2、どのような場合にシーケンス化が必要か
a)メモリ内のオブジェクトを1つのファイルまたはデータベースに保存したい場合.
b)ソケットでネットワーク上でオブジェクトを転送したい場合.
c)RMIを介してオブジェクトを転送したい場合.
3、1つのオブジェクトをシーケンス化するとき、いったい何が起こったのか.
シーケンス化されない前に、ヒープ(Heap)に保存されている各オブジェクトには、インスタンス変数(instance ariable)のような対応する状態(state)があります.
Foo myFoo = new Foo(); 
myFoo .setWidth(37); 
myFoo.setHeight(70); 

  以下のコードでシーケンス化すると、MyFooオブジェクトのwidthとHeightインスタンス変数の値(37,70)がfoo.serファイルに保存され、後でファイルから読み出され、スタックに元のオブジェクトが再作成されます.もちろん、オブジェクトのインスタンス変数の値を保存するだけでなく、JVMはクラスのタイプなど、小さな情報を保存して元のオブジェクトを復元します.
FileOutputStream fs = new FileOutputStream("foo.ser"); 
ObjectOutputStream os = new ObjectOutputStream(fs); 
os.writeObject(myFoo); 

4、シーケンス化(ファイルに保存)を実現するには
a)Make a FileOutputStream
FileOutputStream fs = new FileOutputStream("foo.ser"); 

b)Make a ObjectOutputStream
ObjectOutputStream os = new ObjectOutputStream(fs);

c)write the object
os.writeObject(myObject1); 
os.writeObject(myObject2); 
os.writeObject(myObject3); 

d) close the ObjectOutputStream
os.close(); 

5、例を挙げて説明する

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)親クラスがシーケンス化を実現すると、子クラスは自動的にシーケンス化を実現し、Serializableインタフェースを明示的に実現する必要はない.
b)あるオブジェクトのインスタンス変数が他のオブジェクトを参照し、そのオブジェクトをシーケンス化するときも参照オブジェクトをシーケンス化する.
c)すべてのオブジェクトがシーケンス化できるわけではありません.なぜできないのかについては、次のような理由があります.
  1.セキュリティ上の理由は、オブジェクトがprivate、publicなどのfieldを持っていること、ファイルへの書き込みやrmi転送など、転送するオブジェクトに対して、シーケンス化された転送の過程で、このオブジェクトのprivateなどのドメインは保護されていないことなどです.
  2.socket、threadクラスなどのリソース割り当ての原因は、シーケンス化、転送、保存が可能であれば、再リソース割り当てもできません.また、このように実現する必要はありません.
引用:
http://zhidao.baidu.com/question/155071231.html
--