假设您需要将二进制数据写入标准输出:
sys.stdout.buffer.write(data)然后,您可以使用这两种方法中的任何一种来冲洗它:
sys.stdout.flush()
sys.stdout.buffer.flush()在一个简单的情况下,这两个电话的工作方式似乎是一样的。然而:
stdout对象(_io.TextIOWrapper)上的刷新buffer子对象(_io.BufferedWriter)进行刷新。在哪种情况下,一个人宁愿选择一个而另一个呢?
发布于 2017-02-02 13:34:00
从根本上讲,TextIOWrapper和BufferedWriter之间的区别在于它们被设计用来处理什么。通过查看Python文档,您将看到BufferedWriter设计用于处理字节流:
BufferedIOBase处理原始字节流(RawIOBase)上的缓冲。它的子类BufferedWriter、BufferedReader和BufferedRWPair缓冲区流是可读的、可写的、可读的和可写的。
虽然TextIOWrapper被设计用来处理特定于文本的字节流,但是处理诸如编码和解码之类的事情。
另一个IOBase子类TextIOBase处理字节表示文本的流,并处理从unicode字符串到unicode字符串的编码和解码。扩展它的TextIOWrapper是到缓冲原始流(BufferedIOBase)的缓冲文本接口。
至于哪一个你应该叫同花顺。这是一个清洗,因为TextIOWrapper实际上只是文本BufferedIOBase的一个很好的包装器。因此,如果正如您所说的那样,您实际上是在处理二进制数据,而不是基于文本的数据,那么您可以只使用BufferedIOBase。
https://stackoverflow.com/questions/42003208
复制相似问题