transient 关键字的作用是控制变量的序列化,在变量声明前加上该关键字,可以阻止该变量被序列化到文件中。
示例:
项目A:序列化对象类

package com.java.serializable;
import java.io.Serializable;
public class Class04 implements Serializable {
// 序列化ID
private static final long serialVersionUID = 1L;
// 昵称
private String nickName;
// 关键字transient修饰,该变量无法被序列化
private transient int age = 26;
// 关键字transient修饰,该变量无法被序列化
private transient String sex = "man";
// 以下省略setter、getter方法
}
项目A:序列化对象工具类

package com.java.serializable;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
public class CtestA04 {
public static void main(String[] args) {
serializeObjectToFile();
}
private static final String PATH = "F:\\objFile.txt";
// 序列化对象,转换成二进制数据存储到文件objFile.txt
private static void serializeObjectToFile() {
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new FileOutputStream(PATH));
Class04 classObj = new Class04();
classObj.setNickName("nickName");
oos.writeObject(classObj);
} catch (Exception e) {
e.printStackTrace();
} finally {
if(null != oos) {
try {
oos.close();
} catch (IOException e) {}
}
}
}
}
项目B:反序列化对象

package com.java.serializable;
import java.io.Serializable;
public class Class04 implements Serializable {
private static final long serialVersionUID = 1L;
private String nickName;
private int age;
private String sex;
// 以下省略setter、getter方法
}
项目B:反序列化对象工具类

package com.java.serializable;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class CtestB04 {
public static void main(String[] args) {
reverseSerializeFileToObject();
}
// 存储Java对象二进制数据的文件
private static final String PATH = "F:\\objFile.txt";
/**
* 将二进制文件反序列化为java的object对象
*
* 反序列化条件:
* 1.java类的包名一致
* 2.java类中变量名,变量类型一致
* 3.序列化ID一致
*/
private static void reverseSerializeFileToObject() {
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(new FileInputStream(PATH));
Class04 classObj = (Class04) ois.readObject();
System.out.println("classObj.nickName="+classObj.getNickName());
System.out.println("classObj.age="+classObj.getAge());
System.out.println("classObj.sex="+classObj.getSex());
} catch (Exception e) {
e.printStackTrace();
} finally {
if(null != ois) {
try {
ois.close();
} catch (IOException e) {}
}
}
}
}
执行结果如下:
System.out.println("classObj.nickName="+classObj.getNickName());// classObj.nickName=nickName;
成员变量nickName,可以正常读取值。
System.out.println("classObj.age="+classObj.getAge());// classObj.age=0
System.out.println("classObj.sex="+classObj.getSex());// classObj.sex=null
使用transient 关键字修饰的成员变量age和sex,值为null,说明这两个变量并没有被序列化到二进制文件中。
来源:https://www.cnblogs.com/517cn/p/10872871.html
