前言
在 Java 中,transient 关键字用于标记类的成员变量,表示该变量不应被序列化。
具体作用
防止序列化
标记为 transient 的变量在对象序列化时会被忽略,不会被写入字节流。
适用场景
- 敏感数据:如密码等不应被持久化的信息。
- 临时数据:如缓存或运行时生成的数据,无需保存。
- 不可序列化的对象:若对象引用了不可序列化的类,可将其标记为
transient
以避免序列化错误。
注意事项
- 默认值:反序列化时,
transient
变量会被设为默认值(如 null
、0
等)。
- 自定义序列化:可通过实现
writeObject
和 readObject
方法自定义 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); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } }
|
后记
transient
关键字用于防止特定变量被序列化,适用于保护敏感数据或临时信息。反序列化时,这些变量会被设为默认值。