如何获取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
相关产品推荐
相关产品推荐

