什么时候应该使用BytesIO .getvalue()而不是.getbuffer()?

时间:2020-04-20 09:49:42

标签: python-3.x bytesio

根据BytesIO docs

getbuffer()

返回缓冲区内容的可读和可写视图,而不复制它们。另外,更改视图将透明地更新缓冲区的内容:

getvalue()

返回包含缓冲区全部内容的字节。

所以getbuffer似乎更复杂。但是,如果您不需要可写的视图?然后,您会简单地使用getvalue吗?权衡是什么?

最小示例

在此示例中,似乎它们做的完全相同:

# Create an example
from io import BytesIO
bytesio_object = BytesIO(b"Hello World!")

# Write the stuff
with open("output.txt", "wb") as f:
    f.write(bytesio_object.getbuffer())

1 个答案:

答案 0 :(得分:0)

使用 getbuffer() 更好,因为如果您有非常大的数据,复制它们可能需要很长时间。并且(来自PEP 20):

<块引用> 显式优于隐式。 但是值是未定义的——它可能是 str 或字节。缓冲区总是字节。