验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

Java关键字transient如何使用

阅读:623 来源:乙速云 作者:代码code

Java关键字transient如何使用

      transient 是什么

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

      简单示例

      public class Example implements Serializable {
          private String name;
          private transient int age;
      
          public Example(String name, int age) {
              this.name = name;
              this.age = age;
          }
      
          public String toString() {
              return "Example{name='" + name + "', age=" + age + "}";
          }
      
          public static void main(String[] args) throws Exception {
              String dir = "/Users/ryan/Desktop/";
      
              // 创建一个Example对象并序列化到文件
              Example obj = new Example("Ryan", 20);
      
              System.out.println("Before serialization: " + obj);
              OutputStream outputStream = Files.newOutputStream(Paths.get(dir + "example.ser"));
              try (ObjectOutputStream out = new ObjectOutputStream(outputStream)) {
                  out.writeObject(obj);
              }
      
              // 从文件中反序列化Example对象
              InputStream inputStream = Files.newInputStream(Paths.get(dir + "example.ser"));
              try (ObjectInputStream in = new ObjectInputStream(inputStream)) {
                  System.out.println("After deserialization: " + in.readObject());
              }
          }
      }

      执行结果:

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

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

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

      使用场景

      序列化敏感数据

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

      提高序列化性能

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

      临时数据

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

      需要注意的点

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

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

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

    分享到:
    *特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
    相关文章
    {{ v.title }}
    {{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
    你可能感兴趣
    推荐阅读 更多>