序列化: 将数据结构或对象转换成二进制字节流的过程
反序列化:将在序列化过程中所生成的二进制字节流的过程转换成数据结构或者对象的过程
作用:持久化 Java 对象比如将 Java 对象保存在文件中,或者在网络传输 Java 对象
Java的serialization提供了一种持久化对象实例的机制,当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。
对于不想进行序列化的变量,使用 transient
关键字修饰。
transient
关键字的作用是:阻止实例中那些用此关键字修饰的的变量序列化;当对象被反序列化时,被 transient
修饰的变量值不会被持久化和恢复。
transient
一般在实现了Serializable接口的类中使用
class Transient implements Serializable { private String name; private transient String address; private static String nation = "中国"; // constructors, toString, getters and setters }
@Test public void testTransient() throws Exception { // 实例化一个对象 Transient t = new Transient("Dallas", "上海"); System.out.println("序列化前=====" + t); // 序列化进磁盘 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("transient.txt")); oos.writeObject(t); oos.close(); // 反序列化 ObjectInputStream ois = new ObjectInputStream(new FileInputStream("transient.txt")); t = (Transient) ois.readObject(); System.out.println("序列化后=====" + t); }
测试结果:
序列化前=====Transient{name='Dallas', address='上海', nation='中国'} 序列化后=====Transient{name='Dallas', address='null', nation='中国'}
注意点:
transient
只能修饰变量,不能修饰类和方法。transient
修饰的变量,在反序列化后变量值将会被置成类型的默认值。例如,如果是修饰 int
类型,那么反序列后结果就是 0