如何获取BytesIO对象中read()返回的准确字节数?
如何获取BytesIO对象中存储的字节数据长度?
你用sys.getsizeof(readable)得到的结果不对,是因为这个函数返回的是BytesIO对象本身占用的内存大小,不是它内部存储的字节数据的长度,所以才会输出48而非预期的2。
下面是几种正确的获取方式:
直接获取缓冲区内容再取长度
import io readable = io.BytesIO(b'\xff\xd8') data = readable.getvalue() print(len(data)) # 输出2getvalue()会返回BytesIO中存储的所有字节数据,不管当前文件指针的位置,直接取这个数据的长度就是你要的结果。重置指针后读取数据取长度(适合指针被移动过的场景)
import io readable = io.BytesIO(b'\xff\xd8') readable.seek(2) # 模拟指针被移动到末尾的情况 readable.seek(0) # 重置指针到起始位置 data = readable.read() print(len(data)) # 输出2如果之前调用过
read()或者手动移动过文件指针,需要先用seek(0)把指针移回开头,再读取所有数据后取长度。通过缓冲区视图获取长度(高效但依赖CPython实现)
import io readable = io.BytesIO(b'\xff\xd8') print(len(readable.getbuffer())) # 输出2getbuffer()返回一个不复制数据的缓冲区视图,直接取它的长度就能得到内部字节数据的长度,效率更高,但这是CPython的实现细节,其他Python解释器可能不支持。
内容的提问来源于stack exchange,提问作者Ginetik
相关产品推荐
相关产品推荐

