各種序列化庫的體驗

2021-05-26 20:07:37 字數 2304 閱讀 3528

這裡只用python來分析說明。

python自帶的兩個cpickle, marshal

我用過或嘗試過的包括******json, amf, protobuf, messagepack

就這些來分析比較一下吧。

import time

import cpickle

import ******json

import marshal

import msgpack

import cjson

test_obj = ['abc', 123, , ("abc", 123), 4.56]

times = 100000

st = time.clock()

for x in xrange(times):

cpickle.loads(cpickle.dumps(test_obj))

print 'cpickle process %s times used %s '%(times, time.clock()-st)

st = time.clock()

for x in xrange(times):

******json.loads(******json.dumps(test_obj))

print '******json process %s times used %s '%(times, time.clock()-st)

st = time.clock()

for x in xrange(times):

cjson.decode(cjson.encode(test_obj))

print 'cjson process %s times used %s '%(times, time.clock()-st)

st = time.clock()

for x in xrange(times):

marshal.loads(marshal.dumps(test_obj))

print 'marshal process %s times used %s '%(times, time.clock()-st)

st = time.clock()

for x in xrange(times):

msgpack.loads(msgpack.dumps(test_obj))

print 'msgpack use loads/dumps process %s times used %s '%(times, time.clock()-st)

st = time.clock()

packer = msgpack.packer()

unpacker = msgpack.unpacker()

for x in xrange(times):

unpacker.feed(packer.pack(test_obj))

unpacker.unpack()

print 'msgpack use packer/unpacker process %s times used %s '%(times, time.clock()-st)

我本機的執行結果:

cpickle process 100000 times used 1.63 

******json process 100000 times used 2.45 

cjson process 100000 times used 0.91 

marshal process 100000 times used 0.28 

msgpack use loads/dumps process 100000 times used 1.17 

msgpack use packer/unpacker process 100000 times used 0.28 

可以看出marshal是很快的,但它有版本不相容問題, ******json比較慢,但好像有個cjson比cpickle還快, messagepack使用loads/dumps速度和cpickle差不多, 使用pcker/unpacker則快很多,它號稱比json快10倍,比protobuf快4倍,呵呵,不過我本地安裝msgpack-idl --install python 一直沒有成功,說沒有gem包,就不能用來和protobuf進行比較了

剩下兩種amf, protobuf則真正在rpc裡用的比較多,上面幾種都有不同的缺點, 比如cross language就不夠好, 而amf和protobuf這方面則作的不錯, amf出來的東西長度要長一些,因為它包括型別資訊,而protobuf則只有資料資訊,要小很多。 這是兩種不同的設計哲學。今天太晚了,以後有空把這兩種的使用和比較測試也寫一下。

portobuf各種序列化與反序列化API

1 c陣列的序列化和反序列化api cpp view plain copy c陣列的序列化和序列化api bool parsefromarray const void data,intsize bool serializetoarray void data,intsize const 使用 void...

序列化(序列化)

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

序列化(模型序列化 序列化巢狀)

from rest framework import serializers from meituan.models import merchant,class merchantserializer serializers.modelserializer class meta model merch...