2016-05-03 9 views
-1

教師ArrayListに複数のオブジェクトが格納されていますが、逆シリアル化しようとしていますが、ガベージ値が表示されます。複数のオブジェクトを持つArrayListの逆シリアル化

public void Write(){ 
    try{ 
     FileOutputStream fs=new FileOutputStream("S.txt"); 
     ObjectOutputStream os=new ObjectOutputStream(fs); 
     os.writeObject(teachers); 

     os.close(); 
    }catch(Exception e) 
    {System.out.println(e);} 

} 


public void Read(){ 
    try 
    { 
     FileInputStream fis = new FileInputStream("E:\\Books\\OOP\\Teacher\\S.txt"); 
     ObjectInputStream ois = new ObjectInputStream(fis); 
     teachers = (ArrayList<Teacher>) ois.readObject(); 
     for(Teacher i: teachers){ 
      System.out.println(i.toString()); 
     } 
     ois.close(); 
     fis.close(); 
    }catch(IOException ioe){ 
     System.out.println("Error"); 
     return; 
    }catch(ClassNotFoundException c){ 
     System.out.println("Class not found"); 

     return; 
    } 
} 
+0

"ゴミ値"はどういう意味ですか? 'Teacher'クラスは' toString'をオーバーライドしていますか? – Mena

+0

*&%#&&^$ 5 –

+0

ファイルを直接読み込んだことはありますか? ".txt"ファイルでも、バイナリで書かれているためです。 – Mena

答えて

0

あなたはそれが時にテキストファイルになるだろうことを示唆している曖昧、ここでは「.TXT」をあることを起こる、ファイルの拡張子(に関係なく、バイナリであなたのシリアライズされたオブジェクトを永続化オブジェクトストリームを、使用しています書かれている)。

書き込まれたデータがバイナリデータの場合、テキストエディタを使用して人間のようなものを表示することはできません。

あなたはデシリアライズ時に、あなたのList<Teacher>を反復処理するとき、あなたの「ゴミの値は」も印刷されたら、それがあることを意味:

  1. (縮小)シリアライズが実際に(つまり、ファイルへのごList<Teacher>を書いた成功しましたそして
  2. あなたTeacherクラスが適切か、まったくtoStringをオーバーライドしない場合があります)、それを取得するので、システム出力印刷ストリーム
に供給されたときには、 Object#toStringから [email protected]表記を印刷3210
関連する問題