java中transient關(guān)鍵字的作用解析
前言
日常業(yè)務(wù)中,為了安全起見,有些敏感信息我們不希望在網(wǎng)絡(luò)間被傳輸,例如:用戶密碼登,要么傳遞數(shù)據(jù)時直接將字段過濾,也可以使用transient對字段進(jìn)行修飾,不進(jìn)行序列化,則返回獲取到的字段為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進(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ù)據(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)過以流的信息進(jìn)行傳遞,序列化后被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-04
SpringBoot如何配置獲取request中body的json格式參數(shù)
這篇文章主要介紹了SpringBoot如何配置獲取request中body的json格式參數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06
Java中字符串String的+和+=及循環(huán)操作String原理詳解
Java編譯器在編譯時對String的+和+=操作會創(chuàng)建StringBuilder對象來進(jìn)行字符串的拼接,下面這篇文章主要給大家介紹了關(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-10
SpringBoot打包后無法讀取到resource下的資源文件的解決
這篇文章主要介紹了SpringBoot打包后無法讀取到resource下的資源文件的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-04-04
詳解IDEA 中使用Maven創(chuàng)建項目常見錯誤和使用技巧(推薦)
這篇文章主要介紹了詳解IDEA 中使用Maven創(chuàng)建項目常見錯誤和使用技巧(推薦),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07

