序列化和反序序列化

2021-08-20 20:42:34 字數 2152 閱讀 1282

一:什麼是 序列化與反序列化

1,什麼是序列化:序列化就是將記憶體中的資料結構轉換成一種中間格式儲存到硬碟或者基於網路傳輸

2,反序列化:就是將硬碟或者網路中傳過來的一種資料格式轉換成記憶體中的資料結構

二:為什麼要有序列化和反序列化

1,可以儲存程式的執行狀態

2,資料的跨平台互動

三:  怎麼用

json

優點:跨平台性強

缺點:只能支援/對應部分python部分的資料型別

注意點:# json格式不能識別單引號,全都是雙引號

pickle

優點: 可以支援/對應python的所有資料型別

缺點:只能被python識別,不能跨平台

四:json和pickle例項

1,用json實現序列化

import  json

dic=

##序列化

res=json.dumps(dic)

###寫入檔案

with open ('aa.txt','wt',encoding='utf-8')as f:

f.write(res)

#1和2可以合作一步

# with open('db.pkl','wb') as f:

#     json.dump(dic,f)

2.用json實現反序列化

import json

#從檔案中讀取json格式

with open(『aa.txt','rt',encofing='utf-8')as f:

res=f.read()

####將json格式轉成記憶體中的資料型別

json.loads(res)

#1和2可以合作一步

# with open('db.pkl','rb') as f:

#     dic=json.load(f)

####同理,pickle模組也是這樣是使用

3,用pickle實現序列化

import pickle

dic=

# #1 序列化

# pkl=pickle.dumps(dic)

# # print(pkl,type(pkl))

# #2 寫入檔案

# with open('db.pkl','wb') as f:

#     f.write(pkl)

#1和2可以合作一步

# with open('db.pkl','wb') as f:

#     pickle.dump(dic,f)

4 pickle模組實現反序列化

import pickle

# # #1、從檔案中讀取pickle格式

# with open('db.pkl','rb') as f:

#     pkl=f.read()

# #2、將json_str轉成記憶體中的資料型別

# dic=pickle.loads(pkl)

# print(dic['a'])

#1和2可以合作一步

# with open('db.pkl','rb') as f:

#     dic=pickle.load(f)

# print(dic['a'])

五:eval 在有些情況下也可以被用來做反序列化的工作,不過不建議使用。

因為eval本質上只是把字串裡面的表示式拿出來執行一下,當涉及到python中資料型別的關鍵字時,並不能成功的反序列化。

l例如:

當json檔案中儲存的資料是[ 1  ,   true  ,  null   ]

# 用json反序列化

# with open('db.json','rt',encoding='utf-8') as f:

#     l=json.load(f)

#     print(l)

# 用eval反列化

# with open('db.json','rt',encoding='utf-8') as f:

#     s=f.read() #s ='[1, true, null]'

#     dic=eval(s) #eval('[1, true, null]')#這樣會報錯,因為python會認為true是乙個變數名字而沒有定義

#     print(dic['name'])

序列化(序列化)

原書上翻譯為序列化,msdn翻譯為序列化 作用 當需要儲存,或者網路傳輸 remoting時,資料 物件或值 需要序列化 類似於打包傳輸檔案。system.serializableattribute 序列化是指儲存和獲取磁碟檔案 記憶體或其他地方中的物件。在序列化時,所有的例項資料都儲存到儲存介質上...

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

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

序列化和反序列化

先定義乙個類 serializable xmlroot shintech public class person set public string name set public person this 0,string.empty public person int m age,string m...