本文分两段,上端自己写的,下端网上别人写的
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截取掉,然后在把对象写入到文件。这样就实现了对象序列化的追加。代码如下。
------------------------------------------------------------------------------------------------
往下为本人所写