さらに最近では、流れの使用について話、の役割は、オブジェクトとの相互変換ストリームの流れの自己定義されたクラス間でのオブジェクトのストリームが実際にあります。
それでも次の例を見て、非常に簡単になります。
パブリッククラス学生{
プライベートint型のID。
プライベート文字列名;
プライベート文字列のセックス。
プライベート文字列TEL;
//省略ゲッター、セッター
公共学生(int型のID、文字列名、文字列の性別、文字列の電話番号){
スーパー();
this.id = ID。
this.name =名前;
this.sex =セックス。
this.tel = TEL;
}
}
パブリッククラスTestObjectStream {
パブリック静的無効メイン(文字列[] args){
writeObject();
readObjectメソッド();
}
パブリック静的ボイドのwriteObject(){
{試します
FileOutputStream fosの=新しいのFileOutputStream( "C:/ユーザー/ wangliang /デスクトップ/ 1");
ObjectOutputStreamのOOS =新しいObjectOutputStreamの(FOS);
学生STUDENT1 =新しい学生(1、 "メアリー"、 "女性"、 "11111")。
学生student2 =新しい学生(2、 "ジャック"、 "男性"、 "2222");
学生student3 =新しい学生(3、 "アンディ"、 "男性"、 "3333");
一覧<学生>リスト=は、Arrays.asList(STUDENT1、student2、student3)。
oos.writeObject(リスト); //書き込み対象
oos.flush();
fos.close();
oos.close();
}キャッチ(例外e){
e.printStackTrace();
}
}
パブリック静的ボイドのreadObject(){
{試します
FileInputStreamのFIS =新しいFileInputStreamを( "C:/ユーザー/ wangliang /デスクトップ/ 1");
ObjectInputStreamのOIS =新しいObjectInputStreamの(FIS);
一覧<学生>リストは=(一覧<学生>)ois.readObject(); //オブジェクトが読み込まれます
list.forEach(のSystem.out ::のprintln)。
fis.close();
ois.close();
}キャッチ(例外e){
e.printStackTrace();
}
}
}
次のように異常所見の動作中に、次のとおりです。
java.io.NotSerializableException:com.qianfeng.day33.entity.Student
java.io.ObjectOutputStream.writeObject0で(ObjectOutputStream.java:1184)
java.io.ObjectOutputStream.writeArrayで(ObjectOutputStream.java:1378)
java.io.ObjectOutputStream.writeObject0で(ObjectOutputStream.java:1174)
java.io.ObjectOutputStream.defaultWriteFieldsで(ObjectOutputStream.java:1548)
java.io.ObjectOutputStream.writeSerialDataで(ObjectOutputStream.java:1509)
java.io.ObjectOutputStream.writeOrdinaryObjectで(ObjectOutputStream.java:1432)
java.io.ObjectOutputStream.writeObject0で(ObjectOutputStream.java:1178)
java.io.ObjectOutputStream.writeObjectで(ObjectOutputStream.java:348)
com.qianfeng.day33.test.TestObjectStream.writeObjectで(TestObjectStream.java:28)
com.qianfeng.day33.test.TestObjectStream.mainで(TestObjectStream.java:16)
次のように異常なこの説明によると、シリアル化するいかなるエンティティクラス、プラスコードのシーケンスをしようとしないようにということを教えてくれる:
パブリッククラスの学生は、{java.io.Serializableのを実装します
プライベート静的最終長いserialVersionUIDの= 4500674287188895027L。
プライベートint型のID。
プライベート文字列名;
プライベート文字列のセックス。
プライベート文字列TEL;
//省略ゲッター、セッター
公共学生(int型のID、文字列名、文字列の性別、文字列の電話番号){
スーパー();
this.id = ID。
this.name =名前;
this.sex =セックス。
this.tel = TEL;
}
}
それはjava.io.Serializableのインターフェースを実現することですが、インターフェイスのソースコードの記述を見て:
*
* @authorのunascribed
* @see java.io.ObjectOutputStreamの
* @see java.io.ObjectInputStream
* @see java.io.ObjectOutput
* @see java.io.ObjectInput
* @see java.io.Externalizable
* @since JDK1.1
* /
パブリックインターフェイスシリアライズ{
}
発見インターフェースは、任意のコンテンツを持っていないこと、操作のいくつかは、シリアライズされたオブジェクトストリームがロールに関連付けられているを示し、後ろの@seeに上記の目的のほとんど流れを説明し、その後、最終的には何のシーケンスはそれをやりましたか?
私たちは、類推によって、そのようなこの言語要件でOCとして直列化のために他の言語要件、を見てすることができます次のとおりです。
オブジェクトの//データ(JSONデータ)----> OCストリーム
+(ID)JSONObjectWithData:(NSDataの*)データのオプション:(NSJSONReadingOptions)エラー選ぶ:(NSError **)エラー。
// OCオブジェクト------->データ・ストリーム(データJSON)
+(NSDataの*)dataWithJSONObject:(ID)は、objのオプション:(NSJSONWritingOptions)エラー選ぶ:(NSError **)エラー。
OCでは、1は、直列化エンティティクラスを実装する必要がある場合、これらのメソッドを実装する必要があり、これらの2つの方法の役割は、変換する方法を、ストリームとしてエンティティクラスを転送したいか、ファイルとして保存されたときにシステムに通知することですJSONデータ(指定されたキーと値)に、その文字列は、バイナリ方法(バイト配列)に変換することができます。
だから、Javaで、あなたはそれを必要としないのはなぜ?Javaリフレクションメカニズムは、簡単にこのコンテンツを完了することができますので。
だから、役割のシリアル番号はあるのシーケンスは何ですか?シリアライズとデシリアライズを確保することであることができ、正しく場合にのみ、成功した変換に同じシリアル番号。