本帖最后由 ☆星痕泪 于 2013-12-6 18:17 编辑
在序列化对象后存储进了硬盘,关于这个对象的疑问,比如老师将Person序列化,里面的实例变量也保存了。
只存储一个对象,取出来也是一个。
那连续存储几个对象呢?我连续存储几个,但是反序列化后只能得到一个。
oos.writeObject(new Person("lisi",22));
oos.writeObject(new Person("wangwu",23));
oos.writeObject(new Person("zhangsan",22));
。。。
这写入的同一类型不同对象,它是不是装一个文件里的?每个对象是不是都有自己对应的UID?
另外在读取时,像上面我读一个就只能打印一个,读两个只能打印两个
Person p1 = (Person)ois.readObject();
sop(p1);
Person p2 = (Person)ois.readObject();
sop(p2);
能不能一次性全部读取呢?怎么读?
我试着用BufferedInputStream,但是没法。
老师那里貌似没有细讲,求解答啊
补充:
刚刚的确米有将清楚,上百度和问群里的好友已经解决了。
问题实际上很简单就是:怎么用readObject读取到一个文件对象中的多个对象?
我把代码贴出。若有不对地方多谢提醒。
- /*
- 因为readObject返回值是Object,数组也是Object子类
- 所以想要取出一个文件中的多个对象,可以在序列化之前把多个对象封装进对象数组
- 再序列化,反序列化就只需要这个对象数组即可。然后将对象数组遍历出来
- */
- import java.io.*;
- import java.util.*;
- class Person implements Serializable
- {
- //根据原理UID,我们可以固定标示,对于private私有后变量也可不影响。
- public static final long serialVersionUID = 42L;
- String name;
- int age;
- Person(String name,int age)
- {
- this.name = name;
- this.age = age;
- }
- public String toString()
- {
- return name+":"+age;
- }
- }
- class Demo1
- {
- public static void main(String[] args) throws Exception
- {
- writeObj();
- readObj();
- }
- public static void writeObj()throws Exception
- {
- //创建序列化之前的对象数组,并确定其长度,即对象有几个
- Person[] p = new Person[3];
- //通过循环构造每一个对象
- for (int x=0;x<p.length ;x++ )
- {
- p[x] = new Person("zhangsan",22);
- }
- //先指定目的文件
- FileOutputStream fos = new FileOutputStream("file.Object");
- //new对象将目的文件对象传入
- ObjectOutputStream oos = new ObjectOutputStream(fos);
- //将内存中的对象写入
- oos.writeObject(p);
- oos.close();
- }
- public static void readObj()throws Exception
- {
- ObjectInputStream ois =
- new ObjectInputStream(new FileInputStream("file.object"));
- //反序列化读指定文件,出的是对象数组,所以需要向下转型。
- Person[] p2 = (Person[])ois.readObject();
- //将对象数组遍历取出
- for(Person p:p2)
- {
- System.out.println(p.toString());
- }
- ois.close();
- }
- }
复制代码
|