您的位置:首页 > 编程语言 > Java开发

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

2016-02-21 22:57 816 查看
本文分两段,上端自己写的,下端网上别人写的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默认的对象序列化是每次写入对象都会写入一点头aced0005(占4个字节),然后每次读取都读完头然后在读内容。解决方法就是先判断文件是否存在。如果不存在,就先创建文件。然后写了第一个对象,也写入了头aced 0005。追加的情况就是当判断文件存在时,把那个4个字节的头aced0005截取掉,然后在把对象写入到文件。这样就实现了对象序列化的追加。代码如下。------------------------------------------------------------------------------------------------往下为本人所写本文出自 “编程路上的小菜鸟” 博客,请务必保留此出处http://vista5550.blog.51cto.com/5883826/1743848
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: