JAVA—基础之“Transient”关键字

OK,先别急,在了解 Transient 之前我们先要了解一下什么是序列化,这是个前提。

什么是序列化:

Java 中的对象的序列化指的是将对象转换成以字节序列的形式来表示,这些字节序列包含了该对象的数据与信息,这样方面我们将该对象写入数据库或文件中等等,也可以在网络间进行传输。
我们最经常使用的就是让我们的实体类实现 Serializable 接口,其目的就是为了让其可以序列化。既然可以序列化,当然也可以别反序列化,将其恢复成原先的 Java 对象。
了解完序列化之后,咱们就可以来看 Transient 关键字了



Transient关键字:

Transient 的意义就是阻止序列化(不进行序列化)。
Transient 只能修饰自定义的成员变量,不能修饰本地变量、修饰类、方法等等。一旦被 Transient 所修饰的成员变量是不会被序列化,因为该成员变量已经不再是持久化的一部分了,所以该成员变量在序列化后无法获得。
注意:在使用 Transient 时,需要让该类实现 Serializable 接口



怎么使用 Transient:

我们举个例子,小明的信息有:姓名、年龄、地址。这些信息在网络上传输的时候地址就属于个人敏感信息,我们希望安全,保密。我们就不需要序列化地址。(单纯举例而已)

import java.io.Serializable;

public class MrMing implements Serializable {       // 实现 Serializable 接口

    private String name;
    private Integer age;
    private transient String address;       // 使用 transient 关键字修饰成员变量
    
    ...                                 // 省略 get set 方法
}
import java.io.*;

public class TransientDemo {
    public static void main(String[] args) {
        try {
            // 创建一个小明,并设置相应属性
            MrMing mrMing = new MrMing();
            mrMing.setName("小明");
            mrMing.setAge(18);
            mrMing.setAddress("赛博坦星球");

            // 先打印一边对象信息
            System.out.println("序列化前:" + mrMing.toString());

            // 使用流进行序列化
            ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("mrMing"));
            outputStream.writeObject(mrMing);
            outputStream.close();

            System.out.println();

            // 从流中读取对象
            ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("mrMing"));
            mrMing = (MrMing) inputStream.readObject();
            System.out.println("从流中取出序列化过后的对象:" + mrMing.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

最终结果:
在这里插入图片描述



为什么使用 Transient:

如上面例子所说,在一些包含敏感信息、安全信息在网络上传递的时候,为了安全就不出现这些属性。或者一些没有价值的属性,也没有必要进行序列化,多多少少也会占点空间吧。具体还要根据情景来看是否需要使用。


~~OK,以上就是对 Transient相关的知识了,如有不对请指出,多多海涵。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值