【发布时间】:2020-04-20 09:49:42
【问题描述】:
根据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())
【问题讨论】:
-
从这里的 cpython 代码github.com/python/cpython/blob/master/Modules/_io/bytesio.c 看来,当您调用 getvalue 时,似乎会调整内容缓冲区的大小以剥离额外的缓冲区空间(如果已分配),并且 getbuffer 将返回准备好修改的缓冲区,如果需要。
-
@Kris
getvalue似乎比getbuffer快。如果 getvalue 每次都复制怎么办?另外,与getbuffer不同,getvalue总是指向同一个底层对象
标签: python-3.x bytesio