java中的序列化与反序列化,还包括将多个对象序列化到一个文件中
package Serialize; /** * Created by hu on 2015/11/7. */ //实现序列化必须实现的接口,这就是一个空接口,起到标识的作用 import java.io.Serializable; /** * 用来进行序列化和反序列化的类 * */ public class person implements Serializable { private int age; private String name; private String sex; public person(int age, String name, String sex) { this.age = age; this.name = name; this.sex = sex; } 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; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "person: name="+name+";sex="+sex+";age="+age; } } ************************************************************** package Serialize; import java.io.*; /** * Created by hu on 2015/11/7. */ //序列化和反序列化 public class demo1 { public static void main(String[] args)throws Exception{ for(int i=0;i<100;i++){ person pp=new person(i,"hujingwei"+i,"male"); SerializePerson(pp); } //反序列化只会序列文件中第一个对象 person p=DeserializePerson(); System.out.println(p); } //序列化方法,将对象写到磁盘上的一个文件上 public static void SerializePerson(person p)throws IOException{ /* * 如果FileOutputStream的构造函数中没有第二个参数“true”,那么新添加一个对象的时候,会将上一次序列化到文件 * 中的对象覆盖掉,这种情况下,文件中永远只有一个序列化的对象;将第二个参数设置为“true”的时候,会将每次添加 * 的对象放在文件的末尾。 * */ //ObjectOutputStream对象输出流,将person对象存储到person.txt中,完成对person对象序列化操作 ObjectOutputStream oo=new ObjectOutputStream(new FileOutputStream(new File("D:/person.txt"),true)); //将序列化的对象写入到输入流中去 oo.writeObject(p); System.out.println("Serialize person successfully!"); oo.close(); } //反序列化,将一个对象从磁盘文件中读出来 public static person DeserializePerson()throws Exception{ //ObjectInputStream对象输入流,将person对象从文件中读出 ObjectInputStream oi=new ObjectInputStream(new FileInputStream(new File("D:/person.txt"))); person p=(person)oi.readObject(); System.out.println("Deserialize person successfully!"); return p; } } ******************************************************** package Serialize; /** * Created by hu on 2015/11/7. */ import java.io.*; import java.util.ArrayList; import java.util.List; /** * 序列化和反序列化多个对象 * */ public class demo2 { public static void main(String[] args)throws Exception{ Serialize(); List list=Deserialize(); for (int i=0;i<list.size();i++){ person p=(person)list.get(i); System.out.println(p); } } //序列化方法 public static void Serialize() throws Exception{ //将多个对象保存在一个list中,然后将list当作一个对象存入到文件中(list已经实现了Serializable接口) List<person> list= new ArrayList<person>(); for (int i=0;i<100;i++){ person p=new person(i,"test"+i,"male"); list.add(p); } ObjectOutputStream oo=new ObjectOutputStream(new FileOutputStream(new File("D:/person.txt"),true)); oo.writeObject(list); oo.close(); } //反序列化方法 public static List Deserialize() throws Exception{ ObjectInputStream oi=new ObjectInputStream(new FileInputStream(new File("D:/person.txt"))); List list=(List)oi.readObject(); return list; } }