gpt4 book ai didi

sockets - 将 bytearray 与 socket.recv_into 一起使用

转载 作者:行者123 更新时间:2023-12-02 01:41:01 24 4
gpt4 key购买 nike

我正在做一些套接字 IO,并使用 bytearray 对象作为缓冲区。我想使用 csock.recv_into 接收带有偏移量的数据,如下所示,以避免创建中间字符串对象。不幸的是,似乎字节数组不能以这种方式使用,并且下面的代码不起作用。

buf    = bytearray(b" " * toread)
read = 0
while(toread):
nbytes = csock.recv_into(buf[read:],toread)
toread -= nbytes
read += nbytes

所以我使用下面的代码,它确实使用临时字符串(并且有效)...

buf    = bytearray(b" " * toread)
read = 0
while(toread):
tmp = csock.recv(toread)
nbytes = len(tmp)
buf[read:] = tmp
toread -= nbytes
read += nbytes

有没有一种更优雅的方法来做到这一点,不需要复制中间字符串?

最佳答案

使用memoryview来包装您的bytearray:

buf = bytearray(toread)
view = memoryview(buf)
while toread:
nbytes = sock.recv_into(view, toread)
view = view[nbytes:] # slicing views is cheap
toread -= nbytes

关于sockets - 将 bytearray 与 socket.recv_into 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15962119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com