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

Mar*_*oma 12 bytesio python-3.x

根据BytesIO 文档

获取缓冲区()

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

获取值()

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

所以看起来好像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())
Run Code Online (Sandbox Code Playgroud)

Vad*_*Sim 1

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

显式的比隐式的好。
但值未定义 - 它可能是 str 或 bytes。缓冲区始终是字节。