中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中序列化和反序列化是什么

發布時間:2020-08-04 14:07:31 來源:億速云 閱讀:188 作者:清晨 欄目:編程語言

這篇文章主要介紹Python中序列化和反序列化是什么,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

什么是序列化,反序列化?

序列化:把對象轉換為字節序列的過程稱為對象的序列化。

反序列化:把字節序列恢復為對象的過程稱為對象的反序列化。

自我理解:

在代碼運行時,我們看到很多的對象,可以是一個,也可以是一類對象的集合,很多的對象數據,這些數據中,有些信息我們想讓它持久的保存起來,那么這個就需要做:

數據寫入 》》》**序列化**——就是把內存里面的這些對象給變成一連串的字節描述的過程。

常見的就是把項目中的數據寫入,變成文件保存本地。

同樣的,如果要把保存的文件讀取出來,成為數據顯示在我們的項目中,或者己用。

那么就需要做:

文件讀取》》》**反序列化**——就是把文件中一連串的字節轉為一個對象放入內存里存放的過程。

虛擬機是否允許反序列化,不僅取決于類路徑和功能代碼是否一致,一個非常重要的一點是兩個類的序列化 ID 是否一致(比如java常見的 private static final long serialVersionUID = 1L)。

清單 1 中,雖然兩個類的功能代碼完全一致,但是如果序列化 ID值 不同,他們無法相互序列化和反序列化。

簡單來說,Java的序列化機制是通過在運行時判斷類的serialVersionUID來驗證版本一致性的。

什么情況下需要序列化?

當你想把的內存中的對象狀態保存到一個文件中或者數據庫中時候;

當你想用套接字在網絡上傳送對象的時候;

當你想通過RMI傳輸對象的時候;

(最常用的可能就存數據庫的)

實現序列化

1.java中

在java中序列化和反序列化實現:Java Serializable 序列化接口。

public class xxx implements Serializable {
 private static final long serialVersionUID = 1L
}

2.python中

在Python中,Pickle模塊就用來實現數據序列化和反序列化。

(1)只能在python中使用,只支持python的基本數據類型。

(2)可以處理復雜的序列化語法。(例如自定義的類的方法,游戲的存檔等)

(3)序列化的時候,只是序列化了整個序列對象,而不是內存地址。

需要引入:

import pickle

一、dump()方法

pickle.dump(obj, file, [,protocol])

寫入文件并序列化:

import pickle
test = r'test.txt'
#反序列化代碼中也要定義相同的函數名稱,函數體沒限制
def sayhi(name):
    print("hello",name)
info = {
    '':'',
    'age':32,
    'func':sayhi
}
print(pickle.dumps(info))
with open(test,'wb') as f:
    #f.write( pickle.dumps(info) )
    pickle.dump(info,f)  #跟上面的f.write( pickle.dumps(info) )語意完全一樣。

注釋:序列化對象,將對象obj保存到文件file中去。參數protocol是序列化模式,默認是0(ASCII協議,表示以文本的形式進行序列化),protocol的值還可以是1和2(1和2表示以二進制的形式進行序列化。其中,1是老式的二進制協議;2是新二進制協議)。file表示保存到的類文件對象,file必須有write()接口,file可以是一個以’w’打開的文件或者是一個StringIO對象,也可以是任何可以實現write()接口的對象。

二、load()方法

pickle.load(file)

從文件中讀取,并返序列化:

import pickle
test = r'test.txt'
#需要定義序列化代碼中同樣的函數名,函數體沒限制
def sayhi(name):
    print("hello",name)
    print("hello2",name)
with open(test,'rb') as f:
    # data = pickle.loads(f.read())
    data = pickle.load(f)  #跟上面的data = pickle.loads(f.read())語意完全一樣。
    print('data>>>',data)
print(data['func']("Alex"))

注釋:反序列化對象,將文件中的數據解析為一個python對象。file中有read()接口和readline()接口

一般來說在python中,兩個方法是連用的。

Python中序列化和反序列化是什么

以上是Python中序列化和反序列化是什么的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

木兰县| 方山县| 南靖县| 古蔺县| 临澧县| 仙居县| 呼图壁县| 达日县| 永川市| 兰西县| 沽源县| 陆良县| 凉城县| 通许县| 额敏县| 三明市| 利津县| 和平县| 乌兰县| 昭通市| 昌宁县| 剑河县| 兴文县| 卢氏县| 肇源县| 大庆市| 湟中县| 金堂县| 南召县| 迁安市| 孟州市| 西青区| 大姚县| 休宁县| 安宁市| 农安县| 花垣县| 深水埗区| 会昌县| 靖远县| 新乡县|