java中transient關(guān)鍵字的作用解析
前言
日常業(yè)務(wù)中,為了安全起見,有些敏感信息我們不希望在網(wǎng)絡(luò)間被傳輸,例如:用戶密碼登,要么傳遞數(shù)據(jù)時(shí)直接將字段過濾,也可以使用transient對(duì)字段進(jìn)行修飾,不進(jìn)行序列化,則返回獲取到的字段為null;
transient:實(shí)體Serilizable序列化時(shí),將不需要序列化的屬性前添加,使其不能序列化。
代碼實(shí)現(xiàn)
創(chuàng)建實(shí)體
/** * @author: jiangjs * @description: * @date: 2023/3/2 9:56 **/ @Data @Accessors(chain = true) public class UserInfo implements Serializable { private String userName; private transient String passWord; private transient Integer age; }
在上述實(shí)體中passWord與age前添加了transient進(jìn)行修飾。
測試
/** * @author: jiangjs * @description: Transient使用 * @date: 2023/3/2 9:46 **/ public class Transient { public static void main(String[] args) throws IOException, ClassNotFoundException { UserInfo userInfo = new UserInfo(); userInfo.setUserName("張三").setPassWord("123456").setAge(20); System.out.println("獲取實(shí)體數(shù)據(jù):" + userInfo); writeDataToTxt(userInfo); UserInfo toTxt = readDataToTxt(); System.out.println("序列化后獲取數(shù)據(jù):" + toTxt); } static void writeDataToTxt(UserInfo userInfo) throws IOException { ObjectOutputStream stream = new ObjectOutputStream(new FileOutputStream("D:\\eaafile\\text.txt")); ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\\eaafile\\text2.txt")); stream.writeObject(userInfo); oos.write(("姓名:"+userInfo.getUserName()+" password:"+userInfo.getPassWord()+" age:"+userInfo.getAge()).getBytes("UTF-8")); stream.flush(); oos.flush(); stream.close(); oos.close(); } static UserInfo readDataToTxt() throws IOException, ClassNotFoundException { ObjectInputStream stream = new ObjectInputStream(new FileInputStream("D:\\eaafile\\text.txt")); UserInfo userInfo = (UserInfo)stream.readObject(); stream.close(); return userInfo; } }
測試結(jié)果:
從測試結(jié)果可以看到,實(shí)體在經(jīng)過以流的信息進(jìn)行傳遞,序列化后被transient修飾后的字段獲取到的數(shù)據(jù)信息為null,這些敏感信息被屏蔽。
使用總結(jié)
1)一旦變量被transient修飾,變量將不再是對(duì)象持久化的一部分,該變量內(nèi)容在序列化后無法獲得訪問。
2)transient關(guān)鍵字只能修飾變量,而不能修飾方法和類。注意,本地變量是不能被transient關(guān)鍵字修飾的。變量如果是用戶自定義類變量,則該類需要實(shí)現(xiàn)Serializable接口。
3)被transient關(guān)鍵字修飾的變量不再能被序列化,一個(gè)靜態(tài)變量不管是否被transient修飾,均不能被序列化。
到此這篇關(guān)于java中transient關(guān)鍵字的作用解析的文章就介紹到這了,更多相關(guān)transient關(guān)鍵字內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java throw Exception實(shí)現(xiàn)異常轉(zhuǎn)換
這篇文章主要介紹了Java throw Exception實(shí)現(xiàn)異常轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04SpringBoot如何配置獲取request中body的json格式參數(shù)
這篇文章主要介紹了SpringBoot如何配置獲取request中body的json格式參數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06Java中字符串String的+和+=及循環(huán)操作String原理詳解
Java編譯器在編譯時(shí)對(duì)String的+和+=操作會(huì)創(chuàng)建StringBuilder對(duì)象來進(jìn)行字符串的拼接,下面這篇文章主要給大家介紹了關(guān)于Java中字符串String的+和+=及循環(huán)操作String原理的相關(guān)資料,需要的朋友可以參考下2023-01-01詳細(xì)介紹Java后端API接口開發(fā)規(guī)范
在Java后端開發(fā)中,API接口的設(shè)計(jì)與開發(fā)至關(guān)重要,本文詳細(xì)介紹了命名規(guī)范、接收參數(shù)規(guī)范、參數(shù)檢驗(yàn)、接收方式規(guī)范、異常類處理、統(tǒng)一返回格式以及冪等性等方面的開發(fā)規(guī)范,提供了實(shí)際代碼示例,需要的朋友可以參考下2024-10-10SpringBoot打包后無法讀取到resource下的資源文件的解決
這篇文章主要介紹了SpringBoot打包后無法讀取到resource下的資源文件的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04前后端項(xiàng)目分離解決cors錯(cuò)誤的方法詳解
隨著前后端分離技術(shù)的越來越盛行,跨域問題也逐漸凸顯了出來,下面這篇文章主要給大家介紹了關(guān)于前后端項(xiàng)目分離解決cors錯(cuò)誤的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02詳解IDEA 中使用Maven創(chuàng)建項(xiàng)目常見錯(cuò)誤和使用技巧(推薦)
這篇文章主要介紹了詳解IDEA 中使用Maven創(chuàng)建項(xiàng)目常見錯(cuò)誤和使用技巧(推薦),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07