假设您需要将二进制数据写入标准输出:
sys.stdout.buffer.write(data)
然后要冲洗它,您可以使用以下两种方法之一:
sys.stdout.flush()
sys.stdout.buffer.flush()
在简单的情况下,这两个调用似乎都以相同的方式工作。 然而:
第一个在整个stdout
对象上调用flush(_io.TextIOWrapper
)
第二个仅在buffer
子对象(_io.BufferedWriter
)上调用flush。
在哪种情况下,人们更喜欢一个而不是另一个?
答案 0 :(得分:1)
从根本上说,TextIOWrapper
和BufferedWriter
之间的区别在于它们的设计目标。看一下Python文档,您会发现BufferedWriter
旨在处理字节流:
BufferedIOBase处理原始字节流(RawIOBase)上的缓冲。它的子类BufferedWriter,BufferedReader和BufferedRWPair缓冲流是可读写的,可读写的。
虽然TextIOWrapper
旨在处理特定于文本的字节流,但处理编码和解码等事情。
另一个IOBase子类TextIOBase处理其字节表示文本的流,并处理来自unicode字符串的编码和解码。扩展它的TextIOWrapper是缓冲原始流(BufferedIOBase)的缓冲文本接口。
至于你应该拨打哪一个。它是一种清洗,因为TextIOWrapper
实际上只是文本BufferedIOBase
的一个不错的包装器。因此,如果您正在处理二进制数据而不是基于文本的数据,那么您可以使用BufferedIOBase
。