Javaオブジェクトのシリアル化メカニズム、二つの一般的な目的があります。
1.ファイルにオブジェクトの状態を保存し、オブジェクトの状態を読み取ることによって、オブジェクトを再構築することができ、回復プログラム状態にする必要性
2.ネットワーク上のソケットプログラム転送オブジェクト、それは非常に便利です。
私たちは、クラスが実装java.io.Serializableインタフェースによってシリアライズクラスを行います。このインタフェースは、製造業者(マーカー)インタフェースです。それはそのクラスを達成するためにつまり、インターフェイスは任意のメソッドを実装する必要はありません。主にJava仮想マシン(JVM)を通知するために使用され、オブジェクトはシリアライズする必要があります。
このために、我々はいくつかのポイントをクリアする必要があります。
ソケットは情報を直列化できる場合1.全てのクラスはCMDでシリアル化できるわけではありません、我々はserialverのにjava.net.Socketを入力するには、得ることができ、実際には、ソケットシリアライズすることはできません。
多くの2.java基本クラスは、文字列、ベクトルとしてなどに、シリアライズ可能なインタフェースを実現していますがあります。しかし、このようなハッシュテーブルは、Serializableインタフェースを実装していません。
ObjectOutputStreamのとObjectInputStreamのメインオブジェクトクラスは、2つのストリームを読み取りまたは書き込み。ObjectOutputStreamの出力ストリーム・オブジェクトを提供するためのwriteObjectメソッドを書き込み、ObjectInputStreamのreadObjectメソッドは、入力ストリームからオブジェクトを読み取る方法を提供しました。これらのメソッドを使用してオブジェクトがシリアライズされている必要があります。言い換えれば、あなたはSerializableを実現している必要があります。あなたはハッシュテーブルオブジェクトのwriteObjectたい場合は、その後、あなたは例外となります。
以下の例は以下のとおりです。
輸入java.io. *;
パブリッククラスtestserはSerializableを実装して、{
公共int型II。
testser(){
}
testser(INTのPARAM){
II =ストップ。
}
}
testserはSerializableインタフェースを実装するクラスです。
クラスを介して読み書きのこのシーケンス:
輸入java.io. *;
パブリッククラスのSer {
プライベート静的文字列のデータ・ファイル。
データ・ファイルの=「ser.data」。
公共の静的な無効メイン(文字列[] ARGV){
System.out.println( "Javaのシリアライズデモ。");
Serdal日付;
{試します
=新しいObjectInputStreamの(新しいFileInputStreamを(データ・ファイル・))でのObjectInputStream。
データ=(SerData)in.readObject();
)(in.close。
}
キャッチ(例外e){
データ=新しいtestser();
}
System.out.println( "オリジナルデータ:II =" + data.ii)。
data.ii ++;
{試します
ObjectOutputStreamのアウト=新しいObjectOutputStreamの(新しいのFileOutputStream(データ・ファイルの));
out.writeObject(データ)。
out.flush();
out.close();
}
キャッチ(例外e){
System.out.println(e)は、
}
}
}
ソケットシリアライズオブジェクトを介しあり渡すことができ、おそらく似た、それらを繰り返しません。