读书人

对象序列化疏失

发布时间: 2012-10-26 10:30:58 作者: rapoo

对象序列化出错


import java.io.Serializable;
import java.io.ObjectOutputStream;
import java.io.FileOutputStream;

import java.io.ObjectInputStream;
import java.io.FileInputStream;

//序列化类
class Student implements Serializable{
?private String name;
?private int age;
?
?public Student(String name,int age){
??this.name=name;
??this.age=age;
?}?
?public String getName(){
??return this.name;?
?}
?public int getAge(){
??return this.age;?
?}
}

public class TeseSeriable{
?public static void main(String []args) throws Exception{
??TeseSeriable? test=new TeseSeriable();
??
??//创建一个文件,以追加的方式向文件里写10个对象
??for(int i=0;i<10;i++){
???Student stu=new Student("jack"+i,19+i);
???test.writeToObject(stu,"test.txt");
??}
??
??Thread.sleep(1000);
??//一次性将10个对象反序列化出来,此方法出错.
??test.ListObject("test.txt");
??
?}
?//序化列方法
?public void writeToObject(Object obj,String fileName){
??try{
???ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream(fileName,true));
???out.writeObject(obj);
???out.flush();
???out.close();
??}
??catch(Exception ex){
???ex.printStackTrace();?
??}
?}
?//反序列化方法
?public Object readToObject(String fileName){
??Object obj=null;
??ObjectInputStream in=null;
??try{
??? in=new ObjectInputStream(new FileInputStream(fileName));
???obj=in.readObject();
??}
??catch(Exception ex){
???ex.printStackTrace();?
??}
??finally{
???try{
????in.close();?
???}
???catch(Exception e){}
??}
??return obj;
?}?
?//列出所有对象
?public void ListObject(String fileName){
??try{
???ObjectInputStream in=new ObjectInputStream(new FileInputStream(fileName));
???//为什么读取第二个地象就报错呢?********************************************
???for(int j=0;j<10;j++){
????Student student=(Student)in.readObject();
????
????System.out.println(student.getName());
????System.out.println(student.getAge());
???}
???in.close();
??}
??catch(Exception ex){
???ex.printStackTrace();?
??}
?}
}

============================

???? 我想实现的目地是,将10个对象写入到文件里,然后依次读出.

? 现在写入到文件没有错,但在读到取时却只读到第一个对象,读第二个对象时就报错:

?? java.io.StreamCorruptedException
??????? at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1301)
??????? at java.io.ObjectInputStream.readObject(ObjectInputStream.java:324)
??????? at TeseSeriable.ListObject(TeseSeriable.java:76)
??????? at TeseSeriable.main(TeseSeriable.java:38)

?? 有兴趣的朋友,可以看看.

1 楼 myworkfirst 2007-08-18 没有人知道吗? 2 楼 anxin587 2007-08-21 是不是要把十个对象放到容器里面才能这样做啊! 3 楼 myworkfirst 2007-08-22 我明白3楼意思,你是说把10个对象放进Collection里,然后再writeObject,但是Collection也有限吧,如果我有很多对象的话,还是不可取的. 4 楼 wanghaoxg05 2008-04-11 我也遇到此类问题,我想用一个Collection 不可取
以为我们写日志文件并不是一次性写入 所以这个问题还是另外找方法解决

读书人网 >其他相关

热点推荐