问题描述
我想使用ObjectOutputStream在一个二进制文件的末尾附加多个对象
但是当我多次运行以下代码时,我得到了异常
java.io.StreamCorruptedException: invalid type code: AC
问题是
在Java文件的末尾添加APPEND OBJECTS应该有什么头文件吗?
package sourcepackage;
import sourcepackage.persons.Person;
import sourcepackage.persons.Student;
import java.io.*;
public class MainClass {
public static void main(String[] args) {
Person mahmoud_kanbar = new Student(21,224466,"Mahmoud Kanbar","ITE");
try {
FileOutputStream out = new FileOutputStream("Hello.dat",true);
ObjectOutputStream objectOut = new ObjectOutputStream(out);
objectOut.writeObject(mahmoud_kanbar);
objectOut.close();
out.close();
FileInputStream in = new FileInputStream("Hello.dat");
ObjectInputStream objectIn = new ObjectInputStream(in);
while (in.available() != 0) {
Person hi = (Person) objectIn.readobject();
hi.printInfo();
}
objectIn.close();
in.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
我一直在寻找有关该问题的解决方法数十年,但找不到任何东西
我想像c ++一样添加对象
解决方法
您可以使用ObjectOutputStream
方法将对象附加到相同的writeObject()
。读取时,它们的读取顺序与写入时相同。另外,您可能会收到该错误,因为您的流已缓冲且未写入。您应该使用flush()
方法来确保已将缓冲区写入文件。
让我们将两个对象写入同一文件并读取它们:
Person mahmoud_kanbar = new Student(21,224466,"Mahmoud Kanbar","ITE");
Person omid = new Student(18,200000,"Omid Nejadabbasi","ITE");
try {
FileOutputStream out = new FileOutputStream("Hello.dat",true);
ObjectOutputStream objectOut = new ObjectOutputStream(out);
objectOut.writeObject(mahmoud_kanbar);
objectOut.writeObject(omid);
objectOut.flush();
objectOut.close();
out.close();
FileInputStream in = new FileInputStream("Hello.dat");
ObjectInputStream objectIn = new ObjectInputStream(in);
Person newPerson= (Person) objectIn.readObject();
newPerson.printInfo();
newPerson= (Person) objectIn.readObject();
newPerson.printInfo();
objectIn.close();
in.close();
} catch (Exception e) {
System.out.println(e);
}
readObject()
反序列化序列化到流中的下一个Object。