Java中的瞬态关键字及其使用

最近,我在一个朋友的一个研究项目中遇到了十字架,他们正在学习Java编程的基础知识,一些忘记的敏感信息打印在文本文件中,并记住了Java中的瞬时关键字。

Java中的瞬时关键字在安全性方面起着重要作用,并且在上述类似的“事故”中非常有用,因为它将阻止敏感信息的传输,例如密码到文件,JSON消息等需要序列化的信息。

长话短说,如果将任何变量定义为瞬态, 除非将其定义为staticfinal ,否则它将不会序列化。

让我们来看一些例子。

在下面的示例中,我们将定义一些瞬态变量,我们将通过将它们写入文件,读取它们并查看影响来序列化它们。

import java.io.*; 
public class TestTransient implements Serializable 
{ // Normal variables String a = "JCG";String b = "IS"; // Transient variables transient String c = "GREAT"; public static void main(String[] args) throws Exception { TestTransient foo = new TestTransient(); System.out.println("a before = " + foo.a); System.out.println("b before  = " + foo.b); System.out.println("c before = " + foo.c); System.out.println("---------------------"); // serialization FileOutputStream fileOutputStream = new FileOutputStream("abc.txt"); ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream); objectOutputStream.writeObject(foo); // de-serialization FileInputStream fileInputStream = new FileInputStream("abc.txt"); ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); TestTransient output = (TestTransient) objectInputStream.readObject(); System.out.println("a from file  = " + output.a); System.out.println("b from file  = " + output.b); System.out.println("c from file = " + output.c); } 
}

输出为:

a before = JCG
b before  = IS
c before = GREAT
-----------------------
a from file  = JCG
b from file  = IS
c from file = null

我们可以看到,标记为瞬态的变量c在序列化后丢失了其值。

让我们来看另一个例子。

import java.io.*; 
public class TestTransient implements Serializable 
{ // Normal variables String a = "JCG";String b = "IS"; // Transient variables transient static String c = "GREAT"; transient final String d = "AGAIN!"; public static void main(String[] args) throws Exception { TestTransient foo = new TestTransient(); System.out.println("a before = " + foo.a); System.out.println("b before  = " + foo.b); System.out.println("c before = " + foo.c); System.out.println("d before = " + foo.d); System.out.println("---------------------"); // serialization FileOutputStream fileOutputStream = new FileOutputStream("abc.txt"); ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream); objectOutputStream.writeObject(foo); // de-serialization FileInputStream fileInputStream = new FileInputStream("abc.txt"); ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); TestTransient output = (TestTransient) objectInputStream.readObject(); System.out.println("a from file  = " + output.a); System.out.println("b from file  = " + output.b); System.out.println("c from file = " + output.c); System.out.println("d from file = " + output.d); } 
}

输出为:

a before = JCGb before  = ISc before = GREATd before = AGAIN!
------------------------a from file  = JCGb from file  = ISc from file = GREATd from file = AGAIN!

那么这里发生了什么? 为什么同时打印c和d变量? 答案是因为它们两个都被标记为静态或最终的。

  • 静态变量不是对象状态的一部分,因此暂态关键字无法应用。
  • 最终变量已通过其值序列化,因此瞬态不再适用。

因此,下次记住此关键字时,您需要在序列化时有意放松的信息。

翻译自: https://www.javacodegeeks.com/2019/06/transient-keyword-in-java.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/341671.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RS-232/E1协议转换器产品介绍

RS-232/E1协议转换器是我公司自主研发生产的高性能产品,它将透明E1转换为V.35或者RS232的异步数据接口的接口转换设备,本设备V.35接口可以连接DCE或DTE两种工作方式的设备,RS232接口只支持异步RS232数据,可支持的最高异步速率为11…

java ee cdi_Java EE CDI限定词:快速浏览

java ee cdi在上下文和依赖注入(CDI)中, 限定符是类型安全和松散耦合的主体。 为什么? 没有CDI,我们将以类似于下面的方式注入Java EE组件 注意:这实际上不会编译,只是假设的代码片段 例子1 …

什么是串口协议转换器?串口转换器有哪些特点?

串口转换器是为RS-232/485/422到TCP/IP之间完成数据转换的通讯接口转换器。通过作为服务器端,提供RS-232/485/422终端串口与TCP/IP网络的数据双向透明传输,提供串口转网络功能,RS-232/485/422转网络的解决方案,可以让串口设备立即…

485转232转换器产品介绍及性能参数介绍

配有不同标准串行接口的计算机、外部设备或智能仪器之间进行远程数据通信,需要进行标准串行接口的相互转换。485转换器将单端的RS-232信号转换为平衡差分的RS-485或RS-422信号。RS-485、RS-422自动识别功能,使用更加简单。接下来我们就来为大家详细介绍下…

什么是RS232/RS485转换器?

485转以太网提供串口转网络功能,能够将RS-232/485/422串口转换成TCP/IP网络接口,实现RS-232/485/422串口与TCP/IP网络接口的数据双向透明传输。使得串口设备能够立即具备TCP/IP网络接口功能,连接网络进行数据通信,极大的扩展串口设…

apache jmx_用于JMX访问的Apache Ant任务

apache jmx我想从Ant任务中调用JMX操作。 但是,找到可用的蚂蚁任务库及其用法非常棘手。 因此,让我分享我的经验,使他人更轻松。 JMX操作的Ant任务 我决定遵循Tomcat文档,并使用与tomcat一起分发的ant任务。 仅作记录用途&#…

E1协议转换器使用中常见故障问题及处理方法总结

E1协议转换器也叫接口转换器,是实现数据通信网以太网接口与光纤通信传送网E1接口连接时进行两种接口转换的设备。广泛应用在传输站E1接口与网络交换机相连时的接口转换中。现飞畅科技小编对其使用过程中常见故障及解决方法进行归纳,希望对大家在应用此类…

使JavaDoc保持最新状态的工具

在许多项目中,文档不是最新的。 更改代码后,很容易忘记更改文档。 原因是可以理解的。 在代码中进行更改,然后调试,然后希望在测试中进行更改(或者,如果您使用的是更多TDD,则以相反的顺序进行更…

RS485转换器常见问题总结

通讯转换器主要应用于支持RS485通讯总线结构的工业控制自动化系统,其中包括一卡通、门禁系统、消费系统、考勤系统、、监控、楼宇对讲、停车场系统、自助银行系统、公共汽车收费系统、公路收费站系统等等。但是,我们在使用485转换器的过程中难免会遇到各…

hd-sdi转hdmi转换器产品规格参数及接口定义详解

hd-sdi转hdmi转换器可方便的将HD-SDI 信号转为HDMI 信号,同时会将SDI所带音频信号分离转换后嵌入到HDMI 信号中,以实现声音及图像同步传输。专为电视台、平安城市、公安交警、高速公路、应急指挥中心的高清视频显示等环境提供项目解决方案。接下来就由飞…

singleton设计模式_Java Singleton设计模式

singleton设计模式它是Java中最简单的设计模式之一。 如果有人问我哪种设计模式好,那么我会很自豪地说Singleton。 但是,当他们深入询问单身人士的概念时,我感到很困惑。 真的单身是那么困难吗? 确实不是,但是它有…

HD-SDI转HDMI转换器工作原理及功能介绍

高清HD-SDI转HDMI转换器是一款专用于单路高清数字分量串行接口(HD-SDI和3G-SDI)信号转换为HDMI信号的设备。该设备集成SDI接收器及HDMI调制器,可方便的将HD-SDI信号转为HDMI信号,同时会将SDI所带音频信号分离转换后嵌入到HDMI信号中,以实现声…

注释处理和JPMS

TLDR; 代替annotation.getClass().getMethod("value")调用annotation.annotationType().getMethod("value") 。 所有Java开发人员都听说过注释。 自Java 1.5(或者您坚持认为只有1.6)以来,我们便有了注释。 根…

HD-SDI转HDMI转换器怎么连接?hd-sdi转hdmi转换器常见故障有哪些?

高清HD-SDI转HDMI转换器是一款专用于单路高清数字分量串行接口(HD-SDI和3G-SDI)信号转换为HDMI信号的设备。hd-sdi转hdmi转换器将广播级输出图像使用的SDI信号转换成HDMI影像信号,中继广播与消费型产品的链接器,让SDI信号格式不用经剪辑软件再一次的转换…

sdi转hdmi转换器应用领域及规格参数详解

SDI转HDMI转换器 是一款专用于单路高清数字分量串行接口(HD-SDI,3G-SDI和SD-SDI)信号转换为HDMI 信号的设备。该设备集成SDI 接收器及HDMI 调制器,可方便的将SDI 信号转为HDMI 信号,同时会将SDI所带音频信号分离转换后嵌入到HDMI 信号中&…

Cassandra中的数据建模

在关系数据模型中,我们为域中的每个对象建模关系/表。 对于Cassandra,情况并非如此。本文将详细介绍在Cassandra中进行数据建模时需要考虑的所有方面。 以下是Cassandra数据建模的粗略概述。 从上图可以看出, 概念数据建模和应用程序查询是构…

485串口光纤转换器产品介绍

光纤转换器是RS-232/422/485串行数据通过光纤的远距离传输,可以完成串口到光纤的转换,并且可以延长串行通信信号的传输距离。接下来我们就跟随飞畅科技的小编一起来详细了解下光纤转换器的转换类别有哪些?一起来看看吧! 光纤转换器…

什么是485转光纤?485光纤转换器功能特点及技术参数详解

RS485转光纤转换器实现一路RS-485在光纤上的透明传输,由于采用光纤通信,解决了电磁干扰、地环干扰和雷电破坏的难题,大大提高了数据通讯的可靠性、安全性和保密性,可广泛用于各种工业控制、过程控制、交通控制和分布式数据采集等场…

可视对讲网络协议转换器怎么使用,协议转换器使用方法详细介绍

对于可视对讲网络协议转换器使用方法这块,可能很多人对此都不是很理解,在这里,我们首先来了解下可视对讲的原理,以便大家更好的了解接下来的内容。今天,杭州飞畅的小编就来为大家详细介绍下可视对讲网络协议转换器的使…

什么是协议转换器?协议转换器的定义

现如今,随着各种类型的转换器的出现,在很大程度上扩大了各类仪表的使用范围,使的自动控制系统具有更多的灵活性和更广的适应性,在这方面,协议转换器的应用范围也是非常的广泛。今天,杭州飞畅的小编就来为大…