黑马程序员技术交流社区

标题: ObjectInputStream从文件中读取问题 [打印本页]

作者: 李刚    时间: 2012-11-25 09:53
标题: ObjectInputStream从文件中读取问题
本帖最后由 古银平 于 2012-11-25 16:36 编辑

自己定义的Person类。将Person对象放入文件1.txt中,然后从文件中读取出来,问题——显示的是com.day21.Person@10b30a7,而不是lisi  23.
public class Person implements Serializable{
        public static final long serialVersionUID=42L;
   private String name;
   int age;
   public Person(String name,int age){
           this.name=name;
           this.age=age;
   }
   public String ToString(){
           return name+"::"+age;
   }
}


public class ObjectStreamDemo {

        /**
         * @param args
         * @throws Exception
         */
        public static void main(String[] args) throws Exception {
                // TODO Auto-generated method stub
       //writerObj();  //将Person对象写入方法
       readObj();      //将对象读取出的方法
        }
    public static void readObj() throws Exception{
            ObjectInputStream ois=new ObjectInputStream(new FileInputStream("E:/1.txt"));
        Person p=(Person) ois.readObject();
        System.out.println(p);
      
        ois.close();
    }
    public static void writerObj() throws Exception{
            ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("E:/1.txt"));
       oos.writeObject(new Person("lisi",23));
       oos.close();
    }
   
}
作者: 罗忠文    时间: 2012-11-25 11:06
oos.writeObject(new Person("lisi",23));读进去的的是Person的地址
作者: 森仔    时间: 2012-11-25 11:07
     System.out.println(p); 输入的对象的引用地址,如果想输入lisi  23. 应调用p.toString();
     你Person 类的ToString方法是不是想重写父类的toString()方法,T应该小写。如果你不是想重写父类的方法,而是自己定义的方法,你输出时应该调用p.ToString()啦
作者: 森仔    时间: 2012-11-25 11:20
你如果在writerObj()方法中 也输出System.out.println(p);  比较readObj()方法中输出的System.out.println(p) ,
你可以发现这个两个p对象的地址是不同的,读出来的对象和写进去的不是一个对象 地址不同,我理解为相当于进行了深克隆
作者: 李刚    时间: 2012-11-25 15:35
谢谢大家了,问题已经解决。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2