java中的序列化与反序列化,还包括将多个对象序列化到一个文件中

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;
    }
}