流式输入API
stream_writer(fh)允许您将{em1}$stream数据放入压缩器。
返回的实例实现了io.RawIOBase接口。只有方法
涉及写作的东西会有用的。
stream_writer()的参数必须有一个write(data)方法。作为
压缩数据可用,write()将使用压缩
数据作为它的论据。许多常见的python类型实现write(),包括
打开文件句柄和io.BytesIO。
write(data)方法用于将数据馈送到压缩器中。
可以调用flush([flush_mode=FLUSH_BLOCK])方法来逐出
数据保持在压缩机的内部状态,进入输出对象。这个
可能导致对输出对象的0个或多个write()调用。这种方法
接受可选的flush_mode参数来控制刷新行为。
它的值可以是任何FLUSH_*常量。
write()和flush()都返回写入
对象的write()。在许多情况下,小的投入积累不够
导致写入和write()的数据将返回0。
调用close()将流标记为已关闭和后续I/O
操作将提高ValueError(根据
io.RawIOBase)。close()还将调用基础上的close()。
流,如果存在这样的方法。
通常用法如下:cctx = zstd.ZstdCompressor(level=10)
compressor = cctx.stream_writer(fh)
compressor.write(b'chunk 0\n')
compressor.write(b'chunk 1\n')
compressor.flush()
# Receiver will be able to decode ``chunk 0\nchunk 1\n`` at this point.
# Receiver is also expecting more data in the zstd *frame*.
compressor.write(b'chunk 2\n')
compressor.flush(zstd.FLUSH_FRAME)
# Receiver will be able to decode ``chunk 0\nchunk 1\nchunk 2``.
# Receiver is expecting no more data, as the zstd frame is closed.
# Any future calls to ``write()`` at this point will construct a new
# zstd frame.
实例可以用作上下文管理器。退出上下文管理器是
相当于调用close(),相当于调用
flush(zstd.FLUSH_FRAME):cctx = zstd.ZstdCompressor(level=10)
with cctx.stream_writer(fh) as compressor:
compressor.write(b'chunk 0')
compressor.write(b'chunk 1')
...
重要
如果不调用flush(FLUSH_FRAME),则发出的数据不构成
完整的zstdframe和此数据的使用者可能会抱怨格式错误
输入。建议使用实例作为上下文管理器,以确保
frames已正确完成。
如果输入到这个流压缩程序的数据的大小是已知的,
您可以在压缩开始之前声明它:cctx = zstd.ZstdCompressor()
with cctx.stream_writer(fh, size=data_len) as compressor:
compressor.write(chunk0)
compressor.write(chunk1)
...
声明源数据的大小允许压缩参数
调整一下。如果使用write_content_size,也会导致
写入输出数据的帧头的内容大小。
可以指定到目的地的write()块的大小:cctx = zstd.ZstdCompressor()
with cctx.stream_writer(fh, write_size=32768) as compressor:
...
要查看流式压缩程序使用了多少内存:cctx = zstd.ZstdCompressor()
with cctx.stream_writer(fh) as compressor:
...
byte_size = compressor.memory_size()
到目前为止写入的字节总数通过tell():cctx = zstd.ZstdCompressor()
with cctx.stream_writer(fh) as compressor:
...
total_written = compressor.tell()
stream_writer()接受一个write_return_read布尔参数来控制
write()的返回值。当False(默认值)时,write()返回
字节数是write()``en to the underlying object. When
``True,write()返回从输入中读取的字节数
随后写信给压缩机。True是正确的行为
对于由io.RawIOBase接口指定的write(),将成为
将来版本中的默认值。