簡體   English   中英

用於序列化/反序列化的python編碼/解碼器(Python中的Java kyro等價)

[英]python encode/decoder for serialization/deserialization (Java's kyro equivalence in python)

我需要將python值轉換為字節數組,反之亦然。

例如:

  1. 整數256-> [1,1] // 256 = 1 * 255 + 1
  2. 字符串'ab'-> [97,98] //'a'-> 97,'b'-> 98
  3. 浮點1.23-> [63,157,112,164] // 1.23以4字節表示

對於Java, kryo可用於此目的: byte[] serializedValue = kryoSerializer.writeObjectData(value); 給我價值的序列化結果。

我嘗試了泡菜,但由於它消耗了6個字節來存儲整數對象,因此無法使用它。

import pickle

Foo = 256
picklestring = pickle.dumps(Foo)
print len(picklestring) # returns 6

有什么提示嗎?

添加

# http://docs.python.org/2/library/struct.html
# http://stackoverflow.com/questions/16818463/python-encode-decoder-for-serialization-deserialization-javas-kyro-equivalence
# http://stackoverflow.com/questions/11624190/python-convert-string-to-byte-array
import struct

# >f for 
def encode(value):
    formatString = ""
    if type(value) is float:
        formatString = ">f"
    elif type(value) is int:
        formatString = ">i"
    elif type(value) is str:
        formatString = ">s"
    else:
        raise Exception("Wrong data input: only supports float/int/string")
    packed = struct.pack(formatString, value)
    result = []
    for i in packed:
        # i is a string
        result.append(ord(i[0]))
    return result

使用struct模塊

>>> import struct
>>> struct.pack('>f', 1.23)
'?\x9dp\xa4'
>>> len(struct.pack('>f', 1.23))
4

結構打包遵循C約定的值; 上面的格式按big-endian順序打包一個單精度浮點值(4個字節)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM