IOシリアル番号AC

1つの パッケージのMyTest。
2  
3  インポートたjava.io.Serializable。
4  
5  パブリック クラス Personが実装シリアライズ{
 6      / ** 
7       * 
 8       * / 
9      プライベート 静的 最終 長いのserialVersionUID = 1L 10      プライベート文字列名;
11      プライベート int型の年齢;
12  
13      公衆人(文字列名、int型の年齢){
 14          スーパー()。
15          .nameの= 名前;
16          この .age = 年齢;
17      }
 18  
19      @Override
 20      パブリック文字列のtoString(){
 21          リターン名+ "\ tの" + 年齢。
22      }
 23 }
コードの表示

FileOutputStream

1つの パッケージのMyTest。
2  
3  インポートjava.io.Fileの。
4  インポートjava.io.FileOutputStreamは。
5  輸入java.io.ObjectOutputStreamの。
6つの 
7  
8  パブリック クラスアウト{
 9      パブリック 静的 ボイドメイン(文字列[]引数)をスロー例外{
 10          ファイルファイル= 新しいファイル(「1.TXTを」)。
11件          のFileOutputStreamのFOS = たFileOutputStream(ファイル、真の);
12          ObjectOutputStreamのOOS =新しいObjectOutputStreamの(FOS);
13          oos.writeObject(新しい人( "QWE"、18 ))。
14          oos.writeObject(新しい人( "ABC"、20 ));
15          oos.close()。
16      }
 17 }
コードの表示

ObjectInputStreamの

1つの パッケージのMyTest。
2  
3  インポートjava.io.Fileの。
4  インポートjava.io.FileInputStream。
5  輸入java.io.ObjectInputStream。
6つの 
7  パブリック クラス{で
 8      パブリック 静的 ボイドメイン(文字列[]引数)をスロー例外{
 9          ファイルファイル= 新しいファイル(「1.TXTを」)。
10          FileInputStreamのFIS = 新しいFileInputStreamを(ファイル)。
11          のObjectInputStream OIS = 新しいObjectInputStreamの(FIS)。
12          一方(fis.available()> 0 ){
 13              のSystem.out.println(ois.readObject())。            
14          }
 15          ois.close()。
16      }
 17 }
コードの表示

TXTへの真の追加情報なしになる前に

追加した後、

 

問題の説明:、複数(2以上)クラスファイルのシーケンスを読み出すための時間とのreadObject java.io.ObjectInputStreamクラス()メソッドが第二クラスを読み取るとき、使用されますタイトルに言及した例外をスローします。

理由:任意のファイルには、追加の方法は、彼がファイルにヘッダを追加しますたびにファイルを書き込むためのファイルヘッダ(ヘッダ)とファイル本体(ボディ)、Javaのを持っているが、ヘッダーが認識されないので、戻って投げます異常

ソリューション:

    Javaオブジェクトは、出力ストリームは、問題を解決することはできません、私たちは次のようにサブクラス化し、独自のサブクラスjava.io.ObjectOutputStreamのクラスを記述することができます提供します。

1つの パッケージのMyTest。
2  
3  インポートにjava.io.IOException。
4  インポートjava.io.ObjectOutputStreamの。
5  輸入にjava.io.OutputStream。
6  
7  パブリック クラス MyObjectOutputStreamが延びたObjectOutputStream {
 8      保護 MyObjectOutputStream()はスローにIOException、SecurityExceptionを{
 9つの         スーパー()。
10      }
 11  
12      @Override
 13      保護 空隙 writeStreamHeader()スローIOExceptionが{
14          スーパー.writeStreamHeader()。
15      }
 16  
17      公衆 MyObjectOutputStream(OutputStreamのうち)スローにIOException {
 18の         (アウト)。
19      }
 20 }
コードの表示

このクラスは、他のすべての親クラスを使用して、彼は何も操作を行わないように、ここでヘッダー情報を書き込むためwriteStreamHeaderの親クラス()メソッドをオーバーライドします

ロジックコードでは、書き込まれるファイルは、最初の時間への入力は、次のようにするかどうか決定されます。

 

おすすめ

転載: www.cnblogs.com/hellsino/p/11546168.html