我正在嘗試在「序列化」一章末尾練習中給出的程序。將對象附加到.txt文件
程序要求我聲明一個類Person,它只封裝Name和Address類型的兩個數據成員,它們也是類。 然後,我必須從鍵盤取出一系列名稱和地址,創建對象並將它們寫入文件。 但是,如果FILE ALREADY EXISTS那麼對象必須被附加到現有文件。 我的程序運行非常好,第一次,但第二次,當我嘗試讀回追加的記錄,我得到一個異常
java.io.StreamCorruptedException: invalid type code: AC
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1374)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
at Trial.main(Trial.java:66)
我做了我對這一研究一下,發現該StreamHeader能只能一次寫入並追加損壞它。 它是什麼方式?
對象寫入代碼是:
try(ObjectOutputStream stream = new ObjectOutputStream(new BufferedOutputStream(Files.newOutputStream(filePath,WRITE,CREATE,APPEND)))) {
for(int i = 0;i<name.length;i++) {
Person aPerson = new Person(name[i],address[i]);
System.out.println(aPerson);
stream.writeObject(aPerson);
stream.reset();
aPerson = null;
}
System.out.println("Writing Complete");
擴展名'.txt'表示該文件包含人類可讀的文本。對象流是二進制的。 –
序列化不會生成文本。您不會將對象附加到文本文件,也不應該使用'.txt'文件擴展名。 – EJP