我在文件中写了2个对象,但是当我尝试回读写入的对象时,它会在desrialize方法中抛出异常。它在我编写单个对象时工作正常,但在写入文件时有2个对象失败,并且在读取第二个对象时抛出了异常。
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();
}
}
答案 0 :(得分:1)
你的问题在这里?你正在将两个对象写入同一个文件 - 当然第二个将被附加到第一个 - java无法处理这个!
要修复,请:
答案 1 :(得分:1)
反序列化例程一次只能重新构成一个对象(或对象图)。它假定读入的序列化内容仅属于单个对象,并将包含来自两个对象的数据的文件视为已损坏。
答案 2 :(得分:1)
您无法附加到通过ObjectOutputStream创建的文件。你必须重写整个文件。 ObjectOutputStream写入一个标头,如果ObjectInputStream在文件中重新出现,它将无法理解。
然而,您可以将多个对象写入相同的 ObjectOutputStream,并将其读回,与此处其他答案中所述相反。