将新的 msgpack 数据附加到文件末尾
append new msgpack data to end of file
在不先解码的情况下将对象附加到 msgpack 数据是否有效?
我是这样的:
- 编码数据1
- 打包数据1
- 将打包数据 1 写入文件
然后,
- 打包数据2
- 将打包数据 2 附加到文件末尾
或者应该是:
- 读取文件
- msgunpack 文件 -> data1
- 创建data1_2(包括data1,data2)
- 包data1_2
- 将打包的 data1_2 写入文件
您可以只附加到文件。查看 我的阅读文章的示例代码,您会看到我也在追加,这很有效。
扩展 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 非常可读。
在不先解码的情况下将对象附加到 msgpack 数据是否有效?
我是这样的:
- 编码数据1
- 打包数据1
- 将打包数据 1 写入文件
然后,
- 打包数据2
- 将打包数据 2 附加到文件末尾
或者应该是:
- 读取文件
- msgunpack 文件 -> data1
- 创建data1_2(包括data1,data2)
- 包data1_2
- 将打包的 data1_2 写入文件
您可以只附加到文件。查看
扩展 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 非常可读。