關于java的關鍵字 transient

我們都知道一個對象只要實現了Serilizable接口,這個對象就可以被序列化,Java的這種序列化模式為開發者提供了很多便利,我們可以不必關系具體序列化的過程,只要這個類實現了Serilizable接口,這個的所有屬性和方法都會自動序列化。

?

然而在實際開發過程中,我們常常會遇到這樣的問題,這個類的有些屬性需要序列化,而其他屬性不需要被序列化,誠然,你可以讓這個類來實現Externalizable接口,這個接口是Serilizable的子接口,但是你必須實現readExternal和writeExternal方法,你可以在這兩個方法中實現具體屬性的反序列化和序列化操作。然而這就意味著你必須在這兩個方法中手工編寫額外的代碼來進行具體屬性的序列化。java的transient關鍵字為我們提供了便利,你只需要實現Serilizable接口,將不需要序列化的屬性前添加關鍵字transient,序列化對象的時候,這個屬性就不會序列化到指定的目的地中。

?

?

package com.zslin.list.demo;   import java.io.Serializable;/**  * * @author WQ<br>   * @version 創建時間:2017年6月18日 上午10:33:15<br>  */
public class A implements Serializable{int a;transient String b;public A(int a,String b){this.a = a;this.b = b;}public String toString(){return "a = "+a+",b = "+b;}
}

?

?

package com.zslin.list.demo;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;/*** * @author WQ<br>* @version 創建時間:2017年6月18日 上午10:34:09<br>*/
public class TestTransient {public static void main(String[] args) throws IOException,ClassNotFoundException {A a = new A(25, "張三");System.out.println(a);ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D://mm.txt"));oos.writeObject(a);oos.close();ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D://mm.txt"));a = (A) ois.readObject();System.out.println(a);}
}

?

運行結果:

?

?

?在上面的例子中,我將屬性b前添加關鍵字transient,我們看到雖然我們序列化的對象a的屬性值為“張三”,但是當我們反序列化之后發現這個屬性為空,說明這個屬性沒有進行序列化。

?

transient使用小結?

1)一旦變量被transient修飾,變量將不再是對象持久化的一部分,該變量內容在序列化后無法獲得訪問。

2)transient關鍵字只能修飾變量,而不能修飾方法和類。注意,本地變量是不能被transient關鍵字修飾的。變量如果是用戶自定義類變量,則該類需要實現Serializable接口。

3)被transient關鍵字修飾的變量不再能被序列化,一個靜態變量不管是否被transient修飾,均不能被序列化。

?

我們也可以,通過ArrayList 源碼中的 ?elementData ?屬性,進一步學習transient這一屬性。

具體可以參照我的上一篇博客。

以上。

?

轉載于:https://www.cnblogs.com/mr-wuxiansheng/p/7043751.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455436.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455436.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455436.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python中文件變化監控-watchdog

起步 在python中文件監控主要有兩個庫&#xff0c;一個是pyinotify&#xff0c;一個是watchdog。pyinotify依賴于Linux平臺的inotify&#xff0c;后者則對不同平臺的的事件都進行了封裝。因為我主要用于Windows平臺&#xff0c;所以下面著重介紹watchdog&#xff08;推薦大家閱…

python決策樹分類鳶尾花_基于決策樹—鳶尾花分類

決策樹算法廣泛應用于&#xff1a;語音識別、醫療診斷、客戶關系管理、模式識別、專家系統等&#xff0c;在實際工作中&#xff0c;必須根據數據類型的特點及數據集的大小&#xff0c;選擇合適的算法。本文選擇經典案例——《鳶尾花分類》一、決策樹定義決策樹算法是一種基于實…

希捷宣布出貨雙碟裝1TB硬盤 單碟500GB上市

希捷今天宣布&#xff0c;單碟容量高達500GB的Barracuda 7200.12 1TB硬盤已經出貨。 現有的1TB硬盤產品一般都是三碟裝(此前也有四碟裝)&#xff0c;包括希捷自家的ST31000340AS&#xff0c;但希捷一進率先將其升級為雙碟裝&#xff0c;存儲密度也達到了329Gb每平方英寸。這樣一…

P1334 瑞瑞的木板

題目描述 瑞瑞想要親自修復在他的一個小牧場周圍的圍欄。他測量柵欄并發現他需要N&#xff08;1≤N≤20,000&#xff09;根木板&#xff0c;每根的長度為整數Li&#xff08;1≤Li≤50,000&#xff09;。于是&#xff0c;他神奇地買了一根足夠長的木板&#xff0c;長度為所需的N…

FFMpeg的output_example.c例子分析

該例子講了如何輸出一個libavformat庫所支持格式的媒體文件。 &#xff08;1&#xff09;av_register_all()&#xff0c;初始化libavcodec庫&#xff0c;并注冊所有的編解碼器和格式。 &#xff08;2&#xff09;guess_format()&#xff0c;根據文件名來獲取輸出文件格式&#…

大量數據+同步+多線程_Vulkan 多線程渲染

1. Overview of Vulkan1.1 計算機圖形軟件圖形軟件有兩個大類&#xff1a;專用軟件包&#xff08;special-purpose packages&#xff09;和通用編程軟件包&#xff08;general programming packages&#xff09;。專用軟件包通常提供一種UI設計語言&#xff0c;讓用戶直接生成想…

飛康任命Gartner前分析師擔任亞洲區市場總監

在虛擬化、數據保護和數據遷移領域具備15年創新經驗的美國飛康軟件公司&#xff08;FalconStor Software, Inc.&#xff0c;NASDAQ&#xff1a;FALC&#xff09;近日宣布任命張瑾&#xff08;Jimmie Chang&#xff09;先生擔任該公司亞洲區市場部門負責人。 飛康公司近日面向全…

12_登陸案例

13131轉載于:https://www.cnblogs.com/ZHONGZHENHUA/p/7044846.html

如何基于FFMPEG和SDL寫一個少于1000行代碼的視頻播放器

http://blog.csdn.net/eplaylity/archive/2008/12/05/3454431.aspx http://www.cnblogs.com/konyel/tag/SDLGuide%E4%B8%AD%E6%96%87%E8%AF%91%E7%89%88/ ffmpeg文檔http://blog.sina.com.cn/s/blog_46dc65a90100a91b.html http://dranger.com/ffmpeg/ffmpeg.html VLC核心功能部…

Flask 概述

什么是Web Framework&#xff1f; Web Application Framework&#xff08;Web應用程序框架&#xff09;或簡單的Web Framework&#xff08;Web框架&#xff09;表示一個庫和模塊的集合&#xff0c;使Web應用程序開發人員能夠編寫應用程序&#xff0c;而不必擔心協議&#xff0…

(五)Maven中的聚合和繼承

一、為什么要聚合&#xff1f; 定義&#xff1a;我們在開發過程中&#xff0c;創建了2個以上的模塊&#xff0c;每個模塊都是一個獨立的maven project&#xff0c;在開始的時候我們可以獨立的編譯和測試運行每個模塊&#xff0c;但是隨著項目的不斷變大和復雜化&#xff0c;我們…

python堆棧反向輸出列表_python - IPython:將Python腳本的輸出重定向到文件(如bash) - 堆棧內存溢出...

IPython有自己的上下文管理器來捕獲stdout / err &#xff0c;但它沒有重定向到文件&#xff0c;它重定向到一個對象&#xff1a;from IPython.utils import iowith io.capture_output() as captured:%run my_script.pyprint captured.stdout # prints stdout from your script…

關于datagrid

基本在公司使用的datagrid不需要自己寫前臺代碼&#xff0c;只需要自己給grid明確id&#xff0c;url以及列屬性即可。 后臺需要返回一個數據類型&#xff1a;{recordsFiltered2, data[], drawnull, recordsTotal2}&#xff0c;通常返回這個數據類型的話&#xff0c;只需要調用d…

M-JPEG、MPEG4、H.264都有何區別 依維安防論壇

壓縮方式是網絡視頻服務器和網絡攝像機的核心技術&#xff0c;壓縮方式很大程度上決定著圖像的質量、壓縮比、傳輸效率、傳輸速度等性能&#xff0c;它是評價網絡視頻服務器和網絡攝像機性能優劣的重要一環。 隨著多媒體技術的發展&#xff0c;相繼推出了許多壓縮編碼標準&…

Django/Flask/Tornado三大web框架性能分析

寫在前面&#xff1a;本文的數據涉及到之前遇到過的問題&#xff0c;大概一次 http 請求到收到響應需要多少時間。這個問題在實際工作中與框架有比較大的關系&#xff0c;因此特別就框架的性能做了一次分析。這里使用之前的一個報告數據&#xff1a; Pythons Web Framework Ben…

python urllib模塊學習筆記

這個模塊是最基本最常用的&#xff0c;以前看過&#xff0c;總結一下 #coding : utf-8import urlliburl http://cnblogs.com#代理服務器proxies {http:http://127.0.0.1:8087}#使用代理服務器打開r urllib.urlopen(url,proxies proxies)print r.info()print r.getcode()pri…

hibernate基礎工具findBySQL學習

public List<Map<String,Object>> findBySQL(String sql,Map<String,Object> param,int start,int max) {log.debug("finding List by hql");try {       //最后返回map map的key可為別名和數據庫字段SQLQuery querysessionFactory.getCurr…

python處理ini文件_python對ini配置文件處理

>>> cf.read("test.ini") #讀取配置文件[test.ini]>>> cf.sections() #片段名[base, callback]>>> cf.options("callback") #配置…

Python實現自動推本地github博客到遠程倉庫

Python實現自動推本地github博客到遠程倉庫 以前的簡單版本 通過python中的os模塊操作系統命令 詳情可參考:Python實現一行代碼推本地git到遠程倉庫 升級版本 本次加入了監聽文件修改功能 這樣腳本只需在后臺運行,即可檢測到對應的文件夾中的內容是否變化 如果變化,則調用…

H.264/MPEG-4 AVC

維基百科&#xff0c;自由的百科全書跳轉到&#xff1a; 導航, 搜索 跳過字詞轉換說明 漢漢▼▲為了閱讀方便&#xff0c;本文使用全文手工轉換。轉換內容&#xff1a;本文采用電腦和信息技術組全文轉換 [查看] ? [編輯] ? [強制刷新] 以下為本條目單獨的全文轉換&#xff0c…