Java关键字transient如何使用

其他教程   发布日期:2025年04月16日   浏览次数:123

这篇“Java关键字transient如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java关键字transient如何使用”文章吧。

    transient 是什么

    在 Java 中,transient 是一个关键字,用于指定一个类的字段(成员变量)在序列化时应该被忽略。在 Java 对象序列化期间,对象的状态被转换为字节流,以便在网络上传输或持久保存到磁盘。如果一个字段被标记为 transient,那么它的值不会被序列化,在反序列化时会被恢复其默认值。

    简单示例

    1. public class Example implements Serializable {
    2. private String name;
    3. private transient int age;
    4. public Example(String name, int age) {
    5. this.name = name;
    6. this.age = age;
    7. }
    8. public String toString() {
    9. return "Example{name='" + name + "', age=" + age + "}";
    10. }
    11. public static void main(String[] args) throws Exception {
    12. String dir = "/Users/ryan/Desktop/";
    13. // 创建一个Example对象并序列化到文件
    14. Example obj = new Example("Ryan", 20);
    15. System.out.println("Before serialization: " + obj);
    16. OutputStream outputStream = Files.newOutputStream(Paths.get(dir + "example.ser"));
    17. try (ObjectOutputStream out = new ObjectOutputStream(outputStream)) {
    18. out.writeObject(obj);
    19. }
    20. // 从文件中反序列化Example对象
    21. InputStream inputStream = Files.newInputStream(Paths.get(dir + "example.ser"));
    22. try (ObjectInputStream in = new ObjectInputStream(inputStream)) {
    23. System.out.println("After deserialization: " + in.readObject());
    24. }
    25. }
    26. }

    执行结果:

    Before serialization: Example{name='Ryan', age=20}
    After deserialization: Example{name='Ryan', age=0}

    在上述示例中,我们创建了一个名为

    1. Example
    的类,并在其中定义了两个字段
    1. name
    1. age
    ,其中
    1. age
    被标记为
    1. transient
    。然后,我们创建了一个
    1. Example
    对象并将其序列化到名为
    1. example.ser
    的文件中。

    接着,我们从文件中反序列化了刚刚序列化的

    1. Example
    对象,并将其赋值给一个新的对象
    1. newObj
    。然后,我们打印出了原始对象和反序列化后的对象。可以看到,在反序列化后,
    1. age
    字段的值被恢复为其默认值 0。

    使用场景

    序列化敏感数据

    有些对象包含一些敏感信息,如密码、访问令牌等,这些信息在对象序列化时需要被保护,以防被未授权的用户访问和泄露。

    提高序列化性能

    有些对象中的字段可能会影响序列化和反序列化的性能,如包含大量数据的对象,这些数据可能会在网络传输或磁盘存储期间增加延迟和负载,使用 transient 关键字可以排除这些字段,提高序列化性能。

    临时数据

    有些字段仅用于对象的内部计算或临时存储数据,这些数据在序列化时无需保留,因此可以使用 transient 关键字来忽略这些字段,从而减少序列化后对象的大小。

    需要注意的点

    • transient关键字只能修饰变量,而不能修饰方法和类。

    • transient标记的变量所在的类必须实现Serializable接口。

    • transient标记的变量在反序列化时会被初始化为默认值,需要在程序中手动进行初始化操作。

    以上就是Java关键字transient如何使用的详细内容,更多关于Java关键字transient如何使用的资料请关注九品源码其它相关文章!