永发信息网

readObject如何连续获取对象

答案:1  悬赏:0  手机版
解决时间 2021-04-22 06:23

java里把一个类对象序列化后,存入文件,在读出时,只能读出第一个,再读的话就异常了,怎么解决

最佳答案

解决这个最好的办法就是把序列化和反序列化写一个共用方法。这样就可以反复使用了。


import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;



public class SerializableTest {


//保存序列化对象方法
private static void save(Person person, String savePath){
ObjectOutputStream out = null;
try {
out = new ObjectOutputStream(new FileOutputStream(savePath));
out.writeObject(person);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(out != null)
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}

}

//反序列化对象方法
public static Person getPerson(String readPath){ //显示序列化后对象的方法
ObjectInputStream in = null;
try {
in = new ObjectInputStream(new FileInputStream(readPath));
return (Person)in.readObject();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}finally{
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}

return null;
}

public static void main(String[] args) {
//这里可以创建N个Person对象
Person person1 = new Person();
person1.setName("SoulCrow1");
person1.setAge(23);

Person person2 = new Person();
person2.setName("SoulCorw2");
person2.setAge(25);

save(person1, "c:/person1.dat"); //将第一个Person对象序列化
save(person2, "c:/person2.dat"); //将第二个Person对象序列化


Person p1 = getPerson("c:/person1.dat");
System.out.println("person1-name:" + p1.getName());
System.out.println("person1-age:" + p1.getAge());

Person p2 = getPerson("c:/person2.dat");
System.out.println("person2-name:" + p2.getName());
System.out.println("person2-age:" + p2.getAge());
}
}


class Person implements Serializable{

private static final long serialVersionUID = -3626274979005298335L;
private String name;
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}


希望对你有帮助。


我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
晚上好的英语是什么
苹果手机配什么耳机好,苹果手机配什么耳机
我滴问问怎么息了
怎样隐蔽地理位置
身体被伤害的申述究竟是多久啊??
广州市白云区林业局我想知道这个在什么地方
元宝针最好开多少头呢
香菱学诗 有没有在百家讲坛 解说过
广西1炎麻护肩图值多少钱
今日资讯的网站是?
小榄有哪路公交车去东风镇啊?
有关于巴金的一些名言。。
老杨广告装饰工程地址在什么地方,想过去办事
寻仙游戏怎么捉宠物
新视野大学英语视听说教程第一册的听力的MP3
推荐资讯
大家都喜欢怎么样的女生?
永修县企业家协会在哪里啊,我有事要去这个地
吉柏利绿色集成顶这个地址在什么地方,我要处
为什么现在的网络游戏收费很惊人!
介绍几部文艺片的说 、
张国荣是怎么死的
打劫搞笑台词,谁有《天下无贼》两个笨贼打劫
从失败中走出来的句子,悲伤时鼓励的诗句
申通快递(平桥区烟草专卖局五里店市场监管稽
哪儿有GBA游戏机动战士高达seed命运下载
丝路游戏怎么玩啊
浦尾小区这个地址在什么地方,我要处理点事
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?