使用 ObjectOutputStream 寫入多個物件,預期輸出順序為「cyh 男 20」「ym 女 20」,實際結果不符。
writeObject(obj) 呼叫順序。NotSerializableException 中斷流。class Person implements Serializable {
String name; String gender; int age;
Person(String n, String g, int a) { name=n; gender=g; age=a; }
@Override public String toString() { return name + " " + gender + " " + age; }
}
public class Test {
public static void main(String[] args) throws Exception {
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.dat"))) {
oos.writeObject(new Person("cyh", "男", 20));
oos.writeObject(new Person("ym", "女", 20));
}
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.dat"))) {
System.out.println(ois.readObject()); // cyh 男 20
System.out.println(ois.readObject()); // ym 女 20
}
}
}
Serializable 且 serialVersionUID 顯式宣告。reset(),注意會清除已寫入物件的引用快取,影響後續同一物件寫入。樓主未提供完整代碼,建議補全 writeObject 呼叫片段以便精準定位。