我没有使用Python进行酸洗和编码。但是,正如我开始了解它们一样,我想我可以使用两种不同的方式执行将python对象转换为字符串的相同操作。
#1:使用pickle模块
>>> encoded = pickle.dumps(range(10))
>>> pickle.loads(encoded)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
#2:使用Base64编码
# First I'l define encode and decode functions for convenience.
def encode(obj):
string = json.dumps(obj)
return base64.b64encode(string)
def decode(string):
decoded_string = base64.b64decode(string)
return json.loads(decoded_string)
# Encode and Decode.
>>> encoded = encode(range(10))
>>> decode(encoded)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
的base64
它们的典型用例是什么?哪种方法的性能更高效?
我现在明白我的问题没有多大意义。比较json
和pickle
将是一个更好的问题。 Base64编码可以在json或pickle字符串上执行,用于创建仅ASCII字符串编码;示例:用于在URL中将数据作为GET参数传递。
答案 0 :(得分:5)
Base64是一种将二进制数据编码为可打印字符串的方法。 一个字节(8位)中有256个可能的值,其中不到一半是可打印字符。例如,你有线路向下(0xa),回车(0xc),空终端(0x0)等等。 当基于文本的协议(即SMTP)发现需要传输二进制数据时 - 需要将此数据编码为文本格式。这是Base64或MIME编码。 您使用64个可打印字符(6位)对所有二进制数据进行编码 - 这意味着您将数据膨胀了33%。它的效率非常低,但它确实有效。
Pickle是Pythons将其对象序列化(将运行时对象转换为比特流对象的过程)的方法。我相信开发该系统的工程师可以使其相对高效。
Base64不是为此而设计的。 Base64只是一种存储二进制数据的低效方法。
答案 1 :(得分:0)
Pickle与base64相比具有许多优势和功能。
例如:
class A:
"""class def here"""
pass
a = A()
apick = pickle.dumps(a)
print(apick)
# this scenario even works when apick is send to a different python instance where A is **not** defined
b = pickle.loads(apick)
但是我认为,如果我们知道我们的实际工作,使用base64发送字节字符串会更快。