IOストリーム - 非直列化ストリームの流れのシーケンス

直列化の実装は、Serializableを実装する必要があります

 

オブジェクトのストリームからデータを読み出します

業務フローの流れのObjectInputStreamは、逆シリアル化と呼ば

ストリームオブジェクトに書き込むためのObjectOutputStream動作フローは、シリアル化されたストリームを参照します

                     特長:操作対象。オブジェクトをファイルに書き込むことができ、オブジェクトは、ファイルから読み込むことができます。

 ジャワのObjectOutputStreamのは、プリミティブデータ型にオブジェクトやグラフをOutputStreamを書きます。ObjectInputStreamのは、(再構成)オブジェクトを読み取ることができます。永続ストレージは、ストリーム内のファイルオブジェクトを使用することによって達成することができます。

                 デフォルトでは、達成するために提供する、シリアル番号を生成し、直列化インターフェイスを             

                    不定死んシリアル番号、内容を変更し、エラーデシリアライズがあるだろう

                   /シリアル番号は、エラーなしでデシリアライズ、内容を変更し、死んでしまいます

 

                             人のクラスを確立

 

オブジェクトをシリアル化するときに、このオブジェクトはSerializableを実装しなければならないクラスに属します。そうでなければ異常持つNotSerializableException例外が発生します。

 

一方、抗シーケンスオブジェクト、クラスオブジェクトが属している場合は、ファイルを変更するには、異常によりInvalidClassExceptionが発生するデシリアライズ、その後、シリアライズした後に行います。この例外は、次の理由で発生します。

 

リットルクラスのシリアル番号とストリームから読み込まれたクラス記述子のバージョン番号のバージョンが一致していません

 

このクラスは、不明なデータ型のLが含まれています

 

このような構成のパラメータLノーアクセス方法

 

直列化マーカーインターフェイス。必須配列にクラスのインターフェイスは、シリアルバージョンが提供されます。serialVersionUIDの。この目的は、バージョン番号とターゲットクラスの対応するシーケンスは、バージョンの不一致であることを確認することです。

 

 

 

 

 

パッケージcom.oracle.demo02、
 インポートしたjava.io.Serializable; 


パブリック クラスの人が実装Serializableを{ 

   プライベート 過渡文字列名;      // 過渡排他的には、(この関数自体)シリアライズすることができない

   公共  int型年齢;                     // 静的で変更することはできませんシリアライズ(この機能を持つことが起こる)

   // デフォルトのシリアル番号を生成し、Serializableインタフェースのための前提条件

   // 不確実な死のシリアル番号、内容を変更し、そこにエラーデシリアライズされます

   // 、設定死んシリアルナンバー内容を変更し、デシリアライズありませんこれは、与えられたある
   プライベートロング決勝静的なのserialVersionUID = 1000L; //は1つのバージョン番号を提供するインタフェースクラスにシリアル化する必要があります。           serialVersionUIDの。この目的は、バージョン番号とターゲットクラスの対応するシーケンスは、バージョンの不一致であることを確認することです。公共パーソン(文字列名、

int型の年齢){ スーパー(); この .nameの= 名前; この .age = 年齢; } パブリック人(){ スーパー()。 // TODO自動生成コンストラクタスタブ } @Override パブリック文字列のtoString(){ 戻り "[個人名=" +名+ "年齢=" +年齢+ "]" } パブリック文字列のgetName(){ 戻り名。 } 公共 ボイドのsetName(文字列名){ この .nameの= 名前。 } 公共 INT getAge(){ リターン年齢; } 公共 ボイド setAge(int型の年齢){ この .age = 年齢。 } }

 

シリアル化ストリーム(ファイルシステムに記述されたクラス)

パッケージcom.oracle.demo02; 

 

インポートjava.io.FileNotFoundException; 

インポートjava.io.FileOutputStreamは、

インポートにjava.io.IOException; 

インポートjava.io.ObjectOutputStreamの、

 

パブリック クラスDemo01 { 

 

         公共 静的 ボイドメイン(文字列[]引数)スロー{IOExceptionが

                   // シリアライズストリーム
 
1 オブジェクトを作成した。

                   // (アドレスを書き込む)先をクリア

                  たFileOutputStreamのFOS = 新しい新たFileOutputStream( "D:\\ \\ person.txt demo0611" ); 

                   // シリアル化されたストリームの作成

                   にObjectOutputStreamのOOSを =新しい新しいObjectOutputStreamの(FOS); 

                   // オブジェクトが出力バイト出力シーケンスFOSオブジェクトの直列化されたストリームによって呼び出されるファイルに書き込みます。writeObject()メソッド列書かれた文書の

                   oos.writeObject(新しい新しい人(「ジョー・スミス」、18 )); 

                   // 解放資源

                   oos.close(); 

                   // 後に内容を読んでシリアライズは、ちんぷんかんぷんの束であります暗号化に対応して、直列化復元

        

 

         } 

 

}

 

オブジェクト直列化復元ストリームのObjectInputStream

事前にObjectOutputStreamを使って書かれたObjectInputStreamの基礎データとオブジェクトが直列化復元しました。java.io.Serializableインタフェースオブジェクトをサポートするストリームから読み込むことができます。

パッケージcom.oracle.demo02; 

 

インポートjava.io.FileInputStream; 

インポートjava.io.FileNotFoundException、

インポートにjava.io.IOException; 

インポートjava.io.ObjectInputStream、

 

パブリック クラスdemo02 { 

 

         公共 静的 ボイドメイン(文字列[]引数)がスローIOExceptionが、ClassNotFoundExceptionが{ 

                   // 非直列化ストリーム

                   // データソースクリア

                   FileInputStreamのFIS = 新しい新規のFileInputStream( "D:\\ \\ person.txt demo0611を" ); 

                   // 非直列化ストリームを作成

                   するObjectInputStream OIS = 新しい新ObjectInputStreamの(FIS); 

                   オブジェクトOBJ = ois.readObject(); 

         // 戻り値は、すべての祖先のクラスであるためOBJECが多型変換がクラス変数を呼び出す前にダウン必要と最初の決定方法は1 persoある

                   IF(OBJ のinstanceof 人) { 

                            人P = (人物)OBJ; 

                            のSystem.out.println(P); 

                   } 

                   // 解放リソース

                   fis.close(); 

         } 

 

}

 

transientキーワードの過渡

クラスオブジェクトをシリアル化する必要がある場合、シリアル化属性がキーワードトランジェントを使用して変更する必要はありませんとき、属性のいくつかは、シリアライズする必要はありません。限り変更は一時的なものとして、このプロパティの配列をシリアル化されないとき。

まだシリアライズしながら対象データのシーケンスは、永続的ストレージであることがあるので、それは、変更されません、そしてクラスに属する静荷重データは、シリアル化されません。

 

おすすめ

転載: www.cnblogs.com/layuechuquwan/p/11458724.html