序列化與反序列化技術

2021-10-03 17:19:57 字數 3076 閱讀 4682

將記憶體中的臨時資料,儲存到本地硬碟的技術;持久化之後,即使程式重啟,也不會造成資料的丟失和重置

//建立student集合

list

stus =

newarraylist

();stus.

add(

newstudent(1

,"小馬",16

));stus.

add(

newstudent(2

,"小菜",16

));stus.

add(

newstudent(3

,"小希",18

));//將集合中的資料寫入檔案

bufferedwriter bw =

newbufferedwriter

(new

outputstreamwriter

(new

fileoutputstream

(new

file

("路徑"))

));//向檔案中寫資料

for(student stu : stus)

/*檢視檔案的時候,會發現出了字串,其他都是亂碼,可以使用+""轉成字串

bw.write(stu.getid()+",");//轉成字串

bw.write(stu.getname()+",");

bw.write(stu.getage()+"");

*/bw.

close()

;

//建立集合存放學生資料

list

stus =

newarraylist

();//讀取學生的資料

bufferedreader br =

newbufferedreader

(new

inputstreamreader

(new

fileinputstream

(new

file

("路徑"))

));//存放讀出來的每條字串的資料

string strstu;

while

((strstu=br.

readline()

)!=null)

br.close()

;

使用物件的序列化技術,來進行持久化。簡化資料轉換的操作,直接將物件的序列化之後存入文件,取出時進行反序列化可直接取出物件,而不用再進行繁瑣的字串操作

反序列化:

將流轉換成對應的物件(輸入)

注意:需要傳輸的物件對應的實體類必須實現序列化介面implements serializable

//建立乙個物件

student stu =

newstudet(1

,"小馬",13

);//使用最基礎的位元組流建立序列化物件

objectoutputstream oos =

newobjectoutputstream

(new

fileoutputstream

(new

file

("路徑"))

);oos.

close()

;//此時檔案中儲存的內容任然是亂碼,但是程式反序列化時可以識別這些資料,將這些資料完整的轉換成原來的物件

//建立讀取的反序列化物件

objectinputstream ois =

newobjectinputstream

(new

fileinputstream

(new

file

("路徑"))

)//readobject方法返回的是乙個物件

student getstu =

(student)ois.

readobjet()

;//反序列化取出的可以取出物件,替代了繁瑣的資料轉換的操作,直接一步到位,讀取出來就是乙個物件

serialversionuid,作為唯一標識,一般實現是程式化介面時,會把這個作為常量加入到實體類中,用來判斷這個類的物件沒有被修改過,防止程式修改了物件資料造成檔案和程式物件資料不一致

建立自定義類,繼承objectoutputstream類,重寫裡面的writestreamheader()方法

/**

* 使用序列化寫入物件時,如果是第一次寫入檔案(檔案為空)

* 就用objectoutputstream寫物件,會寫入乙個頭標記

* 如果不是第一次,就用自定義類寫物件,就不會寫入頭標記

*///自定義乙個類叫subobjoutputstream,繼承objectoutputstream

public

class

subobjoutputstream

extends

objectoutputstream

//重寫父類中的寫頭標記的方法

//每次呼叫writeobject寫入物件時都會先呼叫此方法,安子文就按中寫入頭標記

//但是乙個檔案中只需要乙個頭標記即可,檔案你中有多個頭標記會報異常

@override

protected

void

writestreamheader()

throws ioexception

}

public

class

demo01

else

user user =

newuser(3

,"小希",18

);//將物件存入

oos.

writeobject

(user)

;//關流

oos.

close()

;}}

public

class

demo02

catch

(eofexception e)

} ois.

close()

;}}

序列化和反序列化 C 序列化與反序列化。

序列化介紹 把物件用一種新的格式來表示。系列化只序列化資料。序列化不建議使用自動屬性 為什麼要序列化 將乙個複雜的物件轉換流,方便儲存與資訊交換。class program class person public int age 二進位制序列化 就是將物件變成流的過程,把物件變成byte class...

序列化與反序列化

把複雜的資料型別壓縮到乙個字串中 serialize 把變數和它們的值編碼成文字形式 unserialize 恢復原先變數 eg stooges array moe larry curly new serialize stooges print r new echo print r unserial...

序列化與反序列化

序列化是將物件處理為位元組流以儲存物件或傳輸到記憶體 資料庫或檔案。其主要目的是儲存物件的狀態,以便可以在需要時重新建立物件。相反的過程稱為反序列化。通過序列化,開發人員可以儲存物件的狀態,並在需要時重新建立該物件,從而提供物件的儲存以及資料交換。通過序列化,開發人員還可以執行類似如下的操作 通過 ...