人
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の親クラス()メソッドをオーバーライドします
ロジックコードでは、書き込まれるファイルは、最初の時間への入力は、次のようにするかどうか決定されます。