java中transient關(guān)鍵字的作用解析
前言
日常業(yè)務(wù)中,為了安全起見,有些敏感信息我們不希望在網(wǎng)絡(luò)間被傳輸,例如:用戶密碼登,要么傳遞數(shù)據(jù)時直接將字段過濾,也可以使用transient對字段進行修飾,不進行序列化,則返回獲取到的字段為null;
transient:實體Serilizable序列化時,將不需要序列化的屬性前添加,使其不能序列化。
代碼實現(xiàn)
創(chuàng)建實體
/** * @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; }
在上述實體中passWord與age前添加了transient進行修飾。
測試
/** * @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ù)據(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é)果可以看到,實體在經(jīng)過以流的信息進行傳遞,序列化后被transient修飾后的字段獲取到的數(shù)據(jù)信息為null,這些敏感信息被屏蔽。
使用總結(jié)
1)一旦變量被transient修飾,變量將不再是對象持久化的一部分,該變量內(nèi)容在序列化后無法獲得訪問。
2)transient關(guān)鍵字只能修飾變量,而不能修飾方法和類。注意,本地變量是不能被transient關(guān)鍵字修飾的。變量如果是用戶自定義類變量,則該類需要實現(xiàn)Serializable接口。
3)被transient關(guān)鍵字修飾的變量不再能被序列化,一個靜態(tài)變量不管是否被transient修飾,均不能被序列化。
到此這篇關(guān)于java中transient關(guān)鍵字的作用解析的文章就介紹到這了,更多相關(guān)transient關(guān)鍵字內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java throw Exception實現(xiàn)異常轉(zhuǎn)換
這篇文章主要介紹了Java throw Exception實現(xiàn)異常轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-04-04SpringBoot如何配置獲取request中body的json格式參數(shù)
這篇文章主要介紹了SpringBoot如何配置獲取request中body的json格式參數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06Java中字符串String的+和+=及循環(huán)操作String原理詳解
Java編譯器在編譯時對String的+和+=操作會創(chuàng)建StringBuilder對象來進行字符串的拼接,下面這篇文章主要給大家介紹了關(guān)于Java中字符串String的+和+=及循環(huán)操作String原理的相關(guān)資料,需要的朋友可以參考下2023-01-01詳細(xì)介紹Java后端API接口開發(fā)規(guī)范
在Java后端開發(fā)中,API接口的設(shè)計與開發(fā)至關(guān)重要,本文詳細(xì)介紹了命名規(guī)范、接收參數(shù)規(guī)范、參數(shù)檢驗、接收方式規(guī)范、異常類處理、統(tǒng)一返回格式以及冪等性等方面的開發(fā)規(guī)范,提供了實際代碼示例,需要的朋友可以參考下2024-10-10SpringBoot打包后無法讀取到resource下的資源文件的解決
這篇文章主要介紹了SpringBoot打包后無法讀取到resource下的資源文件的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-04-04詳解IDEA 中使用Maven創(chuàng)建項目常見錯誤和使用技巧(推薦)
這篇文章主要介紹了詳解IDEA 中使用Maven創(chuàng)建項目常見錯誤和使用技巧(推薦),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07