Java 读取多个对象时发生streamcorrupted异常
我向一个文件写入了2个对象,但当我试图读回写入的对象时,它在desriaze方法中抛出了一个异常。当我写一个对象时,它可以正常工作,但在文件中写入两个对象时失败,并且在读取第二个对象时引发异常Java 读取多个对象时发生streamcorrupted异常,java,serialization,Java,Serialization,我向一个文件写入了2个对象,但当我试图读回写入的对象时,它在desriaze方法中抛出了一个异常。当我写一个对象时,它可以正常工作,但在文件中写入两个对象时失败,并且在读取第二个对象时引发异常 File_obj.Serialize_object(d, "/home/dasman/doc/serobj1.bin"); File_obj.Serialize_object(b, "/home/dasman/doc/serobj1.bin"); File_obj.deSerialize_object("
File_obj.Serialize_object(d, "/home/dasman/doc/serobj1.bin");
File_obj.Serialize_object(b, "/home/dasman/doc/serobj1.bin");
File_obj.deSerialize_object("/home/dasman/doc/serobj1.bin");
java.io.StreamCorruptedException: invalid type code: AC
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1373)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:368)
at Testpackage.File_obj.deSerialize_object(File_obj.java:242)
at File_test.main(File_test.java:28)
在File_obj类中序列化和反序列化的方法如下
public static void Serialize_object(Object obj,String filename){
File a = new File(filename);
ObjectOutputStream out = null;
try{
out = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(a,true)));
}catch(IOException e){
e.printStackTrace();
}
try{
out.writeObject(obj);
out.close();
}catch(IOException e){
e.printStackTrace();
}
}
public static void deSerialize_object(String filename){
File a = new File(filename);
int objcount = 0;
ObjectInputStream in = null;
try{
in = new ObjectInputStream(new BufferedInputStream(new FileInputStream(a)));
}catch(IOException e){
e.printStackTrace();
}
Serializable_test obj1 = null;
try{
while(true){
obj1 = (Serializable_test) in.readObject();
objcount++;
System.out.println("The object area is :" + obj1.get_area());
}
}catch(EOFException e){
System.out.println("END of object files reached objects read :" + objcount);
//in.close();
}catch(IOException e){
e.printStackTrace();
}catch(ClassNotFoundException e){
e.printStackTrace();
}
}
你的问题是什么?您正在将两个对象写入同一个文件中—当然,第二个对象将附加到第一个文件中—java无法处理此问题 要解决此问题,请执行以下操作之一:
- A) 写入不同的文件,或
- B) 将对象放入数组或集合(例如列表)中,并将其写入一个文件,反序列化数组/集合并从中检索对象
但是,您可以将多个对象写入同一个ObjectOutputStream,并将其读回,这与其他答案中所述的相反。但是,如果您注意到我有FileOutputStream(a,true)),那么它应该附加到文件中,对吗?“您正在将两个对象写入同一个文件中-当然,第二个将覆盖第一个。”Nu uh-当
文件输出流(a,true)
设置为append.error时不正确。Java确实可以处理这个问题,只要它是在同一个ObjectInputStream中完成的。尽管在覆盖上犯了一个错误,波希米亚人还是提供了一些很好的解决方法。如果这些建议对你不起作用,我建议你发布一个.hmm,那么如果我一次编写一个对象数组而不关闭通道呢?那么它能重组所有的物体吗?是的。整个对象图将被序列化。这是波希米亚人的“B”建议。完全不正确。您可以编写任意数量的对象。但是您必须使用相同的ObjectOutputStream来编写它们。看看我的答案。