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

如何获取WriteableBuffer的字节大小?

如何获取WriteableBuffer的字节大小?

嘿,我来帮你搞定这个问题!你在实现RawIOBase子类的readinto()方法时,需要获取传入的WriteableBuffer的字节大小对吧?其实方法很简单,还能兼顾各种缓冲区类型的兼容性。

首先得明确:WriteableBuffer是一个类型提示,指代所有实现了可写字节缓冲区接口的对象,比如bytearray、memoryview、array.array(元素为单字节类型时)这些都属于它的范畴。

最稳妥且通用的方式是用memoryview来包装传入的缓冲区,然后通过nbytes属性获取总字节数。memoryview是Python专门用来操作内存缓冲区的工具,能直接读取底层缓冲区的字节总量,不管原对象是什么类型,兼容性拉满。

给你写个完整的示例代码,你可以直接参考:

from io import RawIOBase
from typing import WriteableBuffer

class MyRawIO(RawIOBase):
    def readinto(self, buffer: WriteableBuffer) -> int:
        # 将缓冲区转换为memoryview,获取字节大小
        buffer_view = memoryview(buffer)
        total_bytes = buffer_view.nbytes
        
        # 这里模拟读取数据的逻辑,你可以替换成自己的实现
        # 比如从数据源读取最多total_bytes字节的数据
        mock_data = b"sample data to read"[:total_bytes]
        
        # 将数据写入缓冲区
        buffer_view[:len(mock_data)] = mock_data
        
        # 返回实际写入的字节数
        return len(mock_data)

当然,如果能确定传入的都是像bytearray这种直接支持len()的对象,直接用len(buffer)也能得到字节数,但用memoryview的方式更可靠,能覆盖更多边缘情况(比如某些自定义的缓冲区对象)。

备注:内容来源于stack exchange,提问作者Maks Verver

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 17:14:43