You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取BytesIO对象中read()返回的准确字节数?

如何获取BytesIO对象中存储的字节数据长度?

你用sys.getsizeof(readable)得到的结果不对,是因为这个函数返回的是BytesIO对象本身占用的内存大小,不是它内部存储的字节数据的长度,所以才会输出48而非预期的2。

下面是几种正确的获取方式:

  • 直接获取缓冲区内容再取长度

    import io
    
    readable = io.BytesIO(b'\xff\xd8')
    data = readable.getvalue()
    print(len(data))  # 输出2
    

    getvalue()会返回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()))  # 输出2
    

    getbuffer()返回一个不复制数据的缓冲区视图,直接取它的长度就能得到内部字节数据的长度,效率更高,但这是CPython的实现细节,其他Python解释器可能不支持。

内容的提问来源于stack exchange,提问作者Ginetik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 15:52:07