11

我有两个网络缓冲区定义为:

buffer1 = bytearray(4096)
buffer2 = bytearray(4096)

buffer2buffer1不分配额外内存的情况下,将内容从另一个移动到另一个的最快方法是什么?

天真的方法是:

for i in xrange(4096):
    buffer1[i] = buffer2[i]

显然,如果我做buffer1[:]=buffer2[:]python 移动内容,但我不是 100% 确定它,因为如果我这样做:

a = bytearray([0,0,0])
b = bytearray([1,1])
a[:]=b[:]

然后len(a)=2。丢失的字节会发生什么?谁能解释这是如何工作的或如何在缓冲区之间移动数据?

谢谢。

4

1 回答 1

12

在我的电脑上,以下

buffer1[:] = buffer2

在 400 纳秒内复制一个 4KB 的缓冲区。换句话说,你每秒可以做 250 万份这样的副本。

这是否足以满足您的需求?

编辑:如果buffer2比 短,并且您想在不更改目标缓冲区的其余部分的情况下buffer1将其内容复制到特定位置,则可以使用以下命令:buffer1

buffer1[pos:pos+len(buffer2)] = buffer2

同样,您可以使用右侧的切片来仅复制buffer2.

于 2012-05-17T10:26:27.627 回答