將記憶體中的臨時資料,儲存到本地硬碟的技術;持久化之後,即使程式重啟,也不會造成資料的丟失和重置
//建立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...
序列化與反序列化
序列化是將物件處理為位元組流以儲存物件或傳輸到記憶體 資料庫或檔案。其主要目的是儲存物件的狀態,以便可以在需要時重新建立物件。相反的過程稱為反序列化。通過序列化,開發人員可以儲存物件的狀態,並在需要時重新建立該物件,從而提供物件的儲存以及資料交換。通過序列化,開發人員還可以執行類似如下的操作 通過 ...