• 目录

Serializable和transient关键字

阅读量: 389 编辑

Serializable 和 transient 关键字

  • 目标:将对象保存到磁盘或者在网络中传递

  • 通过对象系列化,可以将对象保存在磁盘或网络中

  • 为了实现对象系列化,对应的类必须实现 Serializable 接口

  • 通过 java.io.ObjectOutputStreamwriteObject() 方法可以将对象输出到磁盘文件、网络等设备

  • 通过 java.io.ObjectInputStreamreadObject() 方法可以从磁盘文件中读出保存的对象

  • 通过在属性前面加上 transient 关键字,限制属性写入到文件或网络中

一、代码实战

代码的详细解读,可以参考视频教程

package com.qicong.gj.c19;

import java.io.Serializable;

/**
 * User: 祁大聪
 */
public class Person implements Serializable {

    public int age;
    public transient String name;
    
    public Person(){}
    
    public Person(String name, int age){
    	this.name = name;
        this.age = age;
    }

}

public static void save(){
    try{
        ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("persion.txt"));
        outputStream.writeObject(new Persion("qicong","18"));
        outputStream.close();
    }catch (Exception e){
        e.printStackTrace();
    }finally {

    }
}
public static void read(){
    try {
        ObjectInputStream input = new ObjectInputStream(new FileInputStream("persion.txt"));
        Persion persion = (Persion)input.readObject();
        System.out.println(persion.name+" "+persion.age);

    }catch (Exception e){
        e.printStackTrace();
    }finally {

    }
}

二、serialVersionUID

实现 Serializable 接口后,一般要自己加上 serialVersionUID,表明是这个类的序列号和反序列化的唯一标记。

一般开发工具可以帮你自动生成。

在序列化的时候,会将这个 UID 存储到文件中;反序列化的时候,会用文件中的UID和类中的UID进行比较,如果是不一样的,那么反序列化会失败。

  • 目录