transient關鍵字及Serializable的序列化與反序列化
java中的Serializable提供一種持久化機制,將實現了Serializable介面的物件序列化為位元組序列,並在以後可以將此位元組序列恢復為java物件。
序列化實現了資料的持久化,儲存在硬碟中,並且在網路上進行位元組序列的傳送。
transient:在序列化時,若欄位定義為transient,則會自動對該欄位不進行序列化。不讓序列化機制進行自動儲存與恢復,則加上transient
舉例說明:
package day01;
import java.io.Serializable;
import java.util.Date;
/**
* @author wangpei
* @version
*建立時間:2017年1月17日 下午7:39:15
* 練習序列化
*/
public class xuliehua implements Serializable {
private Date nowtime=new Date();
private String uid;
private transient String pswd;
xuliehua(String uid,String pswd ){
this.uid=uid;
this.pswd=pswd;
}
public String toString (){
String password=null;
if(pswd==null)
password="沒有值";
else
password=pswd;
return "nowtime="+nowtime+"uid="+uid+"pswd="+password;
}
package day01;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
/**
* @author wangpei
* @version
*建立時間:2017年1月17日 下午7:48:12
*
*/
public class test {
public static void main(String[] args) {
xuliehua m=new xuliehua("xiaozhang","123" );
ObjectOutputStream o;
//序列化
try {
o = new ObjectOutputStream(
new FileOutputStream("logInfo.out"));
o.writeObject(m);
o.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//反序列化
try
{
ObjectInputStream in =new ObjectInputStream(
new FileInputStream("logInfo.out"));
xuliehua logInfo = (xuliehua)in.readObject();
System.out.println(logInfo.toString());
}
catch(Exception e) {//deal with exception}
}
}
}
執行後:
nowtime=Tue Jan 17 20:21:17 CST 2017uid=xiaozhangpswd=沒有值
注意:在對位元組序列進行反序列化的過程中,沒有呼叫任何的構造器,包括預設的構造器,整個物件都是通過從InputStream 中去得資料而進行恢復的。舉例:
package day01;
import java.io.Serializable;
import java.util.Date;
/**
* @author wangpei
* @version
*建立時間:2017年1月17日 下午7:39:15
* 練習序列化
*/
public class xuliehua implements Serializable {
private Date nowtime=new Date();
private String uid;
private transient String pswd;
xuliehua( ){
this.uid=”xiaozhang”;
this.pswd=”123”;
}
public String toString(){
String password=null;
if(pswd==null)
password="沒有值";
else
password=pswd;
return "nowtime="+nowtime+"uid="+uid+"pswd="+password;
}
}
package day01;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
/**
* @author wangpei
* @version
*建立時間:2017年1月17日 下午7:48:12
*
*/
public class test {
public static void main(String[] args) {
xuliehua m=new xuliehua();
ObjectOutputStream o;
try {
o = new ObjectOutputStream(
new FileOutputStream("logInfo.out"));
o.writeObject(m);
o.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try
{
ObjectInputStream in =new ObjectInputStream(
new FileInputStream("logInfo.out"));
xuliehua logInfo = (xuliehua)in.readObject();
System.out.println(logInfo.toString());
}
catch(Exception e) {//deal with exception}
}
}
}
結果:
nowtime=Tue Jan 17 20:29:27 CST 2017uid=xiaozhangpswd=沒有值
分析pswd仍然是空值,即使在構造方法中已經對其進行了初始化,但是在恢復的過程中只是呼叫了序列化後的InputStream中的值,而序列化後的pswd為空值,反序列化也為空。
要序列化一個物件,首先,建立某些OutputStream(例如:FileOutputStream)物件,然後將其封裝在ObjectOutputStream物件中,然後呼叫,writeObject方法,並將其傳送給OutputStream,即可進行序列化,反序列化基本相同只不過是讀出。
程式碼:
try {
o = new ObjectOutputStream(
new FileOutputStream(“logInfo.out”));
o.writeObject(m);
o.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
“`
相關推薦
transient關鍵字及Serializable的序列化與反序列化
java中的Serializable提供一種持久化機制,將實現了Serializable介面的物件序列化為位元組序列,並在以後可以將此位元組序列恢復為java物件。 序列化實現了資料的持久化,儲存在硬碟中,並且在網路上進行位元組序列的傳送。 transi
JSON 序列化與反序列化(-)泛型 及 java.lang.reflect.Type
限定 完成 ica 所有 void 數據類型 HR ble DC Type及其子接口的來歷 泛型出現之前的類型 沒有泛型的時候,只有原始類型。此時,所有的原始類型都通過字節碼文件類Class類進行抽象。Class類的一個具體對象就代表一個指定的原始類型。 泛型出現之後的類型
樹的序列化與反序列化及應用
我們知道,先序和中序或者後序與中序都可以唯一確定一棵樹,但是先序和後序不行。 今有兩個需求:判斷兩棵樹是否元素相等或是否元素對稱。 方法1:先序和中序或者中序和後序可以唯一確定一棵樹,那麼我們把他們遍歷生成的特徵序列對比即可判斷。 判相等:用遞迴函式,引數是兩棵樹的跟節點,兩個節點採取任
java序列化與反序列化中transient和static成員剖析
在我的上一篇博文中講解了一些基本的關於java序列化與反序列化的問題,現在我們一起來對物件中宣告為transient和static的變數進行解析。 1:類中宣告為transient變數 一旦類中某個變數宣告為transient,則會告訴JVM,你不用幫我序列化該變數,我自己
Serializable序列化與反序列化編碼例項
概述:當一個類實現了Serializable介面(該介面僅為標記介面,不包含任何方法定義),表示該類可以序列化.序列化的目的是將一個實現了Serializable介面的物件轉換成一個位元組序列,可以。 把該位元組序列儲存起來(例如:儲存在一個檔案裡),以後可以隨時將該位元組
Java核心類庫-IO-對象流(實現序列化與反序列化)
.get throws 反序 code row cts new java cep 使用對象流來完成序列化和反序列化操作: ObjectOutputStream:通過writeObject()方法做序列化操作的 ObjectInputStream:通過readObje
Java IO-5 序列化與反序列化流
str ride log getname file urn turn objects transient 建一個Person類 1 package demo05; 2 3 import java.io.Serializable; 4 5 public cla
契約類相關的序列化與反序列化
pub ima cti 相關 ria 數據 num spa set 契約類指繼承了:DataContract的類。契約類常在WCF,webService等各種服務中作為傳輸數據使用。 凡是契約類或者繼承了契約類的類,如果想要屬性參與序列化與反序列化,需要在屬性上加上標記:D
Java序列化與反序列化
setname [] 進制 方式 gets 創建 保存 ati 取數據 Java序列化與反序列化是什麽?為什麽需要序列化與反序列化?如何實現Java序列化與反序列化?本文圍繞這些問題進行了探討。 1.Java序列化與反序列化 Java序列化是指把Java對象轉換為字節序
asp.net mvc中如何處理字符串與對象之間的序列化與反序列化(一)
osi strong 類結構 plain pbo edate inf esc arp 前臺我們一般用ajax來發送數據到後端進行處理,如果json數據結構和後臺的實體類結構一致,就直接可以反序列化為指定的對象進行操作,非常方便。 前端發送的json數據結構: 後端實體結
C#對象序列化與反序列化
space ros 個人信息 瀏覽器 特性 點名 文件名 屬性節點 派生 1.對象序列化的介紹 (1).NET支持對象序列化的幾種方式 二進制序列化:對象序列化之後是二進制形式的,通過BinaryFormatter類來實現的,這個類位於System.Runtime.Seri
Java將對象寫入文件讀出——序列化與反序列化
ansi print 成員 trace 對象的引用 ack lose 靜態 spa Java類中對象的序列化工作是通過ObjectOutputStream和ObjectInputStream來完成的。 寫入: 1 File aFile=new File(
畢業項目畢業 -- pickle序列化與反序列化操作
style import 使用 python pan 項目 imp 序列化 操作 Python可以使用pickle做序列化: 序列化示例: import picklewith open(‘les.pickle‘, ‘wb‘) as f: pickle.du
C#語言-08.序列化與反序列化
clas 本質 cnblogs 語法 信息 字段 使用 serializa col a. 序列化:是將對象的狀態存儲到特定存儲介質中的過程 i. 語法:public void Serialize(序列化過程的文件流,保存的對象)
Day4 閉包、裝飾器decorator、叠代器與生成器、面向過程編程、三元表達式、列表解析與生成器表達式、序列化與反序列化
反序 bsp pic nbsp tor 序列 space 列表解析 列表 http://pic.cnhubei.com/space.php?uid=1774&do=album&id=1362489http://pic.cnhubei.com/space.ph
01. Java對象的序列化與反序列化簡介
語音 log -c object height 通訊 圖片 二進制 進程 Java對象的序列化與反序列化 ; 給大家講解一下什麽是序列化 & 反序列化 當兩個進程進行遠程通訊的時候,彼此相互可以發送各種類型的數據,如文本,圖片,語音和視頻等無論是任何
如何使用 JSON for Modern C++ 序列化與反序列號,換行符導致序列化失敗
http gb2 elf ldp c++ spi ssp 使用 b16 W48z士5742i4鍁鉀http://shequ.docin.com/qbvl66336 6j夠裝何掖tj嘔蔡5VLhttp://tushu.docin.com/olybb166 渤k搶97L巳綱鋅7
單例模式序列化與反序列化
int nts 如果 mex res tac tor cep ios package com.wz.thread.resolve;import java.io.ObjectStreamException;import java.io.Serializable;/** * 序
python-序列化與反序列化
ret bject 通用 for pla nco ray 字典 read 序列化模塊# 序列化方法# 格式轉換# 把python中的數據轉換成str---序列化# 可以str轉換成python的數據---反序列化 json模塊 # json所有的語言都通用,它能序列化的數
模塊講解----json模塊(跨平臺的序列化與反序列化)
/usr 列表 strong 序列化 類型轉換 min 字符 虛擬 json 一、json的特點 1、只能處理簡單的可序列化的對象;(字典,列表,元祖) 2、json支持不同語言之間的數據交互;(python - go,python - java) 二、使用場