我不确定分配的缓冲区/内存长度是什么意思,但是如果您希望存储在BytesIO
对象中的用户数据长度可以执行
>>> bio = io.BytesIO()
>>> bio.getbuffer().nbytes
0
>>> bio.write(b'here is some data')
17
>>> bio.getbuffer().nbytes
17
但这似乎等同于len(buf.getvalue())
您当前正在使用的。
BytesIO对象的实际大小可以使用sys.getsizeof()
以下方法找到:
>>> bio = io.BytesIO()
>>> sys.getsizeof(bio)
104
或者,您可能会很讨厌并__sizeof__()
直接调用(这就像sys.getsizeof()
但没有适用于该对象的垃圾收集器开销):
>>> bio = io.BytesIO()
>>> bio.__sizeof__()
72
的内存BytesIO
是根据需要分配的,并且会发生一些缓冲:
>>> bio = io.BytesIO()
>>> for i in range(20):
... _=bio.write(b'a')
... print(bio.getbuffer().nbytes, sys.getsizeof(bio), bio.__sizeof__())
...
1 106 74
2 106 74
3 108 76
4 108 76
5 110 78
6 110 78
7 112 80
8 112 80
9 120 88
10 120 88
11 120 88
12 120 88
13 120 88
14 120 88
15 120 88
16 120 88
17 129 97
18 129 97
19 129 97
20 129 97