抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

前言

在 Java 中,transient 关键字用于标记类的成员变量,表示该变量不应被序列化。

具体作用

防止序列化

标记为 transient 的变量在对象序列化时会被忽略,不会被写入字节流。

适用场景

  • 敏感数据:如密码等不应被持久化的信息。
  • 临时数据:如缓存或运行时生成的数据,无需保存。
  • 不可序列化的对象:若对象引用了不可序列化的类,可将其标记为 transient 以避免序列化错误。

注意事项

  • 默认值:反序列化时,transient 变量会被设为默认值(如 null0 等)。
  • 自定义序列化:可通过实现 writeObjectreadObject 方法自定义 transient 变量的序列化行为。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.io.*;

public class TransientExample {
public static void main(String[] args) {
User user = new User("admin", "secret");

// 序列化
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("user.ser"))) {
out.writeObject(user);
} catch (IOException e) {
e.printStackTrace();
}

// 反序列化
try (ObjectInputStream in = new ObjectInputStream(new FileInputStream("user.ser"))) {
User deserializedUser = (User) in.readObject();
System.out.println(deserializedUser); // 输出: User{username='admin', password='null'}
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}

后记

transient 关键字用于防止特定变量被序列化,适用于保护敏感数据或临时信息。反序列化时,这些变量会被设为默认值。

评论