java的对象串行化,一个文件只能保存一个对象吧,不能保存多个对象?

 我来答
gwj879
2013-04-02 · TA获得超过539个赞
知道小有建树答主
回答量:182
采纳率:100%
帮助的人:97.3万
展开全部
实际上是这样的,因为读和写可序列化的对象时使用的是:ObjectOutputStream,和ObjectInputStream类,这两个类的方法对于读取对象使用的方法只有readObject(),这就意味着这能读取 一个对象,这是API写明的东西。

但是,如果你想实现对多多个对象的存取也是可以的。用设计模式里的组合模式噻~或者定义另外管理对象的可序列的化的管理类噻~光说不练假把式,给你写一个简单的组合模式实现的方法~~
类一)
import java.io.Serializable;
class Student implements Serializable {//这是可序列化的类,其中有一个Student ss,就是另外学生类的组合;
int id;
String name;
int age;
Student ss;
public Student(int id, String name, int age, Student ss) {
this.id = id;
this.name = name;
this.age = age;
this.ss = ss;
}
}

类二)//具体的读写类;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class ObjectSer {
public static void main(String[] args) throws IOException,
ClassNotFoundException {
Student s = new Student(1022, "gaowenjian", 12, new Student(1211,
"jiagnyandong", 13, null));
FileOutputStream fo = new FileOutputStream("data.ser");
ObjectOutputStream so = new ObjectOutputStream(fo);
try {
so.writeObject(s);
so.close();
} catch (Exception e) {
System.out.println(e.getMessage());
}
s = null;
FileInputStream fi = new FileInputStream("data.ser");
ObjectInputStream si = new ObjectInputStream(fi);
try {
s = (Student) si.readObject();
si.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
System.out.println("Student Info:");
System.out.println("ID :" + s.id);
System.out.println("Name :" + s.name);
System.out.println("Age :" + s.age);
while (s.ss != null) {//此处实现对组合的读取;
s = s.ss;
if (s != null) {
System.out.println("Student's frident Info:");
System.out.println("ID :" + s.id);
System.out.println("Name :" + s.name);
System.out.println("Age :" + s.age);
}
}
}
}

望满意~~
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式