Java transient关键字

左手的ㄟ右手 2023-09-30 10:21 103阅读 0赞

在 Java 中,序列化用于将对象转换为字节流。字节流由实例的数据以及存储在该实例中的数据类型组成。反序列化执行完全相反的操作。它将字节序列转换为原始对象数据。在序列化过程中,当我们不想序列化对象时,可以使用transient 关键字。

为什么要使用transient 关键字?

transient 关键字可以与类的数据成员一起使用,以避免它们的序列化。例如,如果程序接受用户的登录详细信息和密码。但是我们不想将原始密码存储在文件中。在这里,我们可以使用transient 关键字,当 JVM 读取transient 关键字时,它会忽略对象的原始值,而是存储对象的默认值。

句法:

  1. private transient <member variable>;

  1. transient private <member variable>;

何时使用transient 关键字?

  1. transient 修饰符可用于存在从同一类实例中的其他数据成员派生的数据成员的情况。
  2. 这个transient 关键字可以与不描述对象状态的数据成员一起使用。
  3. 非序列化对象或类的数据成员可以使用transient 修饰符。

Java transient 关键字示例

举个例子,我们声明了一个类为Student,它有三个数据成员id、nameage。如果你序列化对象,所有的值都将被序列化,但我们不想序列化一个值,例如age,那么我们可以将年龄数据成员声明为transient。

在这个例子中,我们创建了两个类StudentPersistExampleStudent类的age数据成员被声明为transient,它的值不会被序列化。

如果您反序列化对象,您将获得transient变量的默认值。

让我们创建一个带有transient变量的类。

Student.java

  1. import java.io.*;
  2. public class Student implements Serializable {
  3. int id;
  4. String name;
  5. transient int age;//Now it will not be serialized
  6. public Student(int id, String name, int age) {
  7. this.id = id;
  8. this.name = name;
  9. this.age = age;
  10. }
  11. }

PersistExample.java

  1. import java.io.FileOutputStream;
  2. import java.io.ObjectOutputStream;
  3. class PersistExample {
  4. public static void main(String args[]) throws Exception {
  5. Student s1 = new Student(211, "ravi", 22);//creating object
  6. //writing object into file
  7. FileOutputStream f = new FileOutputStream("f.txt");
  8. ObjectOutputStream out = new ObjectOutputStream(f);
  9. out.writeObject(s1);
  10. out.flush();
  11. out.close();
  12. f.close();
  13. System.out.println("success");
  14. }
  15. }

输出:

  1. success

现在编写反序列化代码。

DePersist.java

  1. import java.io.*;
  2. class DePersist {
  3. public static void main(String args[]) throws Exception {
  4. ObjectInputStream in = new ObjectInputStream(new FileInputStream("f.txt"));
  5. Student s = (Student) in.readObject();
  6. System.out.println(s.id + " " + s.name + " " + s.age);
  7. in.close();
  8. }
  9. }

输出:

  1. 211 ravi 0

如您所见,打印学生的年龄返回 0,因为年龄的值未序列化。

在本文中,我们讨论了Java中transient关键字的使用,在Java程序中使用transient关键字的位置以及transient关键字的实现。

发表评论

表情:
评论列表 (有 0 条评论,103人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java transient关键字

    在 Java 中,序列化用于将对象转换为字节流。字节流由实例的数据以及存储在该实例中的数据类型组成。反序列化执行完全相反的操作。它将字节序列转换为原始对象数据。在序列化过程中,

    相关 java transient关键字

    transient是用在序列化中的。当我们序列化的过程中,如果我们不想序列化某个字段,那么我们就可以使用这个关键字,jvm就会在序列化的时候自动忽略这个字段的数值。 tran

    相关 java transient关键字

    1. transient的作用及使用方法 我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,

    相关 Java关键字transient

    Java关键字transient transient是类型修饰符,只能用来修饰字段。在对象序列化的过程中,标记为transient的变量不会被序列化。 示例:

    相关 Java - transient关键字

    Java中的对象序列化 在讨论`transient`之前,有必要先搞清楚Java中序列化的含义; Java中对象的序列化指的是将对象转换成以字节序列的形式来表示,这些字