Java 序列化

序列化:把对象转为字节序列的过程
反序列化:字节序列恢复为Java对象

序列化方式:

扩展Serializable 接口
java.io.Serializable 空接口

Serializable:标记接口,实现该接口无须实现任何方法,只是表明该类的实例是可序列化的
Externalizable

所有在网络上传输的对象都应该是可序列化的,否则将会出现异常;所有需要保存到磁盘里的对象的类都必须可序列化;程序创建的每个JavaBean类都实现Serializable;

实现Serializable实现序列化的类,程序可以通过如下两个步骤来序列化该对象:

1.创建一个ObjectOutputStream,这个输出流是一个处理流,所以必须建立在其他节点流的基础之上

// 创建个ObjectOutputStream输出流
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.txt"));
2.调用ObjectOutputStream对象的writeObject方法输出可序列化对象

// 将一个Person对象输出到输出流中
oos.writeObject(per);

public class User implements Serializable {

    private int age;
    private String name;

    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 static void main(String[] args) throws Exception, IOException{

          //序列化
//        User u = new User();
//        u.setAge(25);
//        u.setName("vven");
//        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("E:/person.txt")));
//        oos.writeObject(u);

        //反序列化
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("E:/person.txt")));
        User u1 = (User) ois.readObject();

        System.out.println(u1.getAge());
        System.out.println(u1.getName());
    }

}

//output:
//25
//vven
//

http://www.cnblogs.com/xdp-gacl/p/3777987.html

序列对象引用字段

**如果序列化java对象的某个实体 是另一个类的引用。 则该类必须是可序列化的,否则 抛出异常。

Exception in thread "main" java.io.NotSerializableException: basics.A

posted @ 2017-02-11 10:46  ironbrady  阅读(93)  评论(0编辑  收藏  举报