fluent瞬态_Java中的瞬态关键字及其使用
生活随笔
收集整理的這篇文章主要介紹了
fluent瞬态_Java中的瞬态关键字及其使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
fluent瞬態
最近,我在一個朋友的一個研究項目中遇到了一個十字架,他們正在學習Java編程的基礎知識,其中一些被遺忘的敏感信息打印在文本文件中,并記住了Java中的瞬時關鍵字。
Java中的瞬時關鍵字在安全性方面起著重要作用,并且在上述類似的“事故”中非常有用,因為它將阻止敏感信息的傳輸,例如密碼到文件,JSON消息等需要序列化的信息。
簡而言之,如果將任何變量定義為瞬態, 除非將其定義為static或final ,否則它將不會序列化。
讓我們看下面的例子。
在下面的示例中,我們將定義一些瞬態變量,我們將通過將它們寫入文件,讀取它們并查看影響來序列化它們。
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
fluent瞬態
總結
以上是生活随笔為你收集整理的fluent瞬态_Java中的瞬态关键字及其使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 表情嘿哈什么意思 表情嘿哈的含义
- 下一篇: graphql 有必要吗_您准备好观看G