java序列化追加_Java对象序列化追加的问题,以及Java的读取多个对象的问题解决方法。...

本文展示了Java对象序列化代码,将Person对象存入二进制文件并读取。同时提到在聊天项目中,Java默认对象序列化写入对象会覆盖,每次写入有4字节头。解决方法是判断文件是否存在,存在时截取4字节头再追加对象,实现序列化追加。

本文分两段,上端自己写的,下端网上别人写的

public class SerializableTest1

{

/**

* 保存为一个二进制的文件

*/

public static void main(String[] args) throws Exception

{

Person p1 = new Person(20,"张三",33.4);

Person p2 = new Person(50,"李四",53.4);

Person p3 = new Person(10,"王五",123.4);

//存入序列化的对象

FileOutputStream fos = new FileOutputStream("person.txt");

ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeObject(p1);

oos.writeObject(p2);

oos.writeObject(p3);

oos.close();

///////////////////////////////////////////////////////

//取出序列化的对象

FileInputStream fn = new FileInputStream("person.txt");

ObjectInputStream ois = new ObjectInputStream(fn);

while(fn.available() > 0)    //代表文件中还有内容

{

Person p = (Person)ois.readObject();

System.out.println(p);

}

}

}

class Person implements Serializable

{

String name;

int age;

//    transient int age;    //此属性不可序列化

double height;

public Person(int age, String name, double height)

{

this.age = age;

this.name = name;

this.height = height;

}

public String toString()

{

return this.name + "," +this.age + "," + this.height;

}

}

//////////////////////////////////////////////////////////////////////////////////////////////////

为尊重原创作者,贴出原始地址:

http://www.cnblogs.com/liaoweipeng/p/4474680.html

这几天做一个小的聊天项目用到对象序列化的知识,发现对象序列化不能像普通文件一样直接追加对象。每次写入对象都会被覆盖。弄了2个多小时终于解决了。Java默

认的对象序列化是每次写入对象都会写入一点头aced

0005(占4个字节),然后每次读取都读完头然后在读内容。解决方法就是先判断文件是否存在。如果不存在,就先创建文件。然后写了第一个对象,也写入了

头aced 0005。追加的情况就是当判断文件存在时,把那个4个字节的头aced

0005截取掉,然后在把对象写入到文件。这样就实现了对象序列化的追加。代码如下。

------------------------------------------------------------------------------------------------

往下为本人所写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值