将新的 msgpack 数据附加到文件末尾

append new msgpack data to end of file

在不先解码的情况下将对象附加到 msgpack 数据是否有效?

我是这样的:

然后,

或者应该是:

您可以只附加到文件。查看 我的阅读文章的示例代码,您会看到我也在追加,这很有效。

扩展 Alex 的回答,因为 spec 仍然没有阐明这一点,而且我不确定如何将该范例转化为其他库。我不确定这是否是官方规范的一部分,但这是最不令人惊讶的实施方式,而且它具有直观的意义。如果您想要仅附加的数据格式,这将非常有用。

您应该能够简单地连接任何打包的 msgpack 对象。你的库应该提供某种类型的 Unpacker class,它接受一个包含一个或多个串联的 msgpack 对象的字节流,并发出一个解包结构流。如果您的图书馆缺少此功能,您可能必须自己实现它。

这是 python 的 msgpack 包中的样子:

from io import BytesIO
import msgpack as mp

buf = BytesIO()
buf.write(packer.pack(1))
buf.write(packer.pack(2))
buf.write(packer.pack('foo'))
buf.write(packer.pack(True))
buf.write(packer.pack({"spam":"eggs"}))

print('file contents: {}'.format(buf.getvalue()))
buf.seek(0)

unpacker = mp.Unpacker(buf)
for i, obj in enumerate(unpacker):
    print('{}: {} {}'.format(i, repr(obj), type(obj)))

输出:

file contents: b'\x01\x02\xa3foo\xc3\x81\xa4spam\xa4eggs'
0: 1 <class 'int'>
1: 2 <class 'int'>
2: 'foo' <class 'str'>
3: True <class 'bool'>
4: {'spam': 'eggs'} <class 'dict'>

如果您想实现自己的,python 回退 Unpacker 非常可读。