日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
創(chuàng)新互聯(lián)Python教程:Python序列化和反序列化

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

北林網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,北林網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為北林上1000+提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的北林做網(wǎng)站的公司定做!

序列化:把對(duì)象轉(zhuǎn)換為字節(jié)序列的過(guò)程稱為對(duì)象的序列化。

反序列化:把字節(jié)序列恢復(fù)為對(duì)象的過(guò)程稱為對(duì)象的反序列化。

自我理解:

在代碼運(yùn)行時(shí),我們看到很多的對(duì)象,可以是一個(gè),也可以是一類對(duì)象的集合,很多的對(duì)象數(shù)據(jù),這些數(shù)據(jù)中,有些信息我們想讓它持久的保存起來(lái),那么這個(gè)就需要做:

數(shù)據(jù)寫入 》》》**序列化**——就是把內(nèi)存里面的這些對(duì)象給變成一連串的字節(jié)描述的過(guò)程。

常見(jiàn)的就是把項(xiàng)目中的數(shù)據(jù)寫入,變成文件保存本地。

同樣的,如果要把保存的文件讀取出來(lái),成為數(shù)據(jù)顯示在我們的項(xiàng)目中,或者己用。

那么就需要做:

文件讀取》》》**反序列化**——就是把文件中一連串的字節(jié)轉(zhuǎn)為一個(gè)對(duì)象放入內(nèi)存里存放的過(guò)程。

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

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

簡(jiǎn)單來(lái)說(shuō),Java的序列化機(jī)制是通過(guò)在運(yùn)行時(shí)判斷類的serialVersionUID來(lái)驗(yàn)證版本一致性的。

什么情況下需要序列化?

當(dāng)你想把的內(nèi)存中的對(duì)象狀態(tài)保存到一個(gè)文件中或者數(shù)據(jù)庫(kù)中時(shí)候;

當(dāng)你想用套接字在網(wǎng)絡(luò)上傳送對(duì)象的時(shí)候;

當(dāng)你想通過(guò)RMI傳輸對(duì)象的時(shí)候;

(最常用的可能就存數(shù)據(jù)庫(kù)的)

實(shí)現(xiàn)序列化

1.java中

在java中序列化和反序列化實(shí)現(xiàn):Java Serializable 序列化接口。

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

2.python中

在Python中,Pickle模塊就用來(lái)實(shí)現(xiàn)數(shù)據(jù)序列化和反序列化。

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

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

(3)序列化的時(shí)候,只是序列化了整個(gè)序列對(duì)象,而不是內(nèi)存地址。

需要引入:

import pickle

一、dump()方法

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

寫入文件并序列化:

import pickle
test = r'test.txt'
#反序列化代碼中也要定義相同的函數(shù)名稱,函數(shù)體沒(méi)限制
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) )語(yǔ)意完全一樣。

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

二、load()方法

pickle.load(file)

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

import pickle
test = r'test.txt'
#需要定義序列化代碼中同樣的函數(shù)名,函數(shù)體沒(méi)限制
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())語(yǔ)意完全一樣。
    print('data>>>',data)
print(data['func']("Alex"))

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

一般來(lái)說(shuō)在python中,兩個(gè)方法是連用的。

python學(xué)習(xí)網(wǎng),大量的免費(fèi)python視頻教程,歡迎在線學(xué)習(xí)!

本文轉(zhuǎn)自:https://blog.csdn.net/ITBigGod/article/details/86477083


新聞名稱:創(chuàng)新互聯(lián)Python教程:Python序列化和反序列化
分享地址:http://m.5511xx.com/article/cdppcpc.html