2012-05-17 20 views
6

Tôi đã hai bộ đệm mạng định nghĩa là:Làm thế nào để sao chép một bộ đệm python bytearray?

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

Đó là cách nhanh nhất để di chuyển nội dung từ buffer2 để buffer1 mà không phân bổ thêm bộ nhớ?

Cách ngây thơ sẽ làm:

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

Rõ ràng nếu tôi làm buffer1[:]=buffer2[:] trăn di chuyển nội dung, nhưng tôi không chắc chắn 100% của nó vì nếu tôi làm:

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

rồi len(a)=2. Điều gì xảy ra với byte bị thiếu? Bất cứ ai có thể giải thích cách hoạt động này hoặc làm thế nào để di chuyển dữ liệu giữa các bộ đệm?

Cảm ơn.

+0

Tôi nghĩ rằng những gì bạn đang làm trong mã đầu tiên của bạn là "di chuyển nội dung từ buffer2 đến buffer1", không phải ngược lại. – jadkik94

+0

cảm ơn @ jadkik94, đã được sửa. – josgek

Trả lời

6

Trên máy tính của tôi, sau đây

buffer1[:] = buffer2 

bản một bộ đệm 4KB ở dưới 400 nano giây. Nói cách khác, bạn có thể làm 2,5 triệu bản sao như vậy mỗi giây.

Điều này có đủ nhanh cho nhu cầu của bạn không?

chỉnh sửa: Nếu buffer2 ngắn hơn buffer1, và bạn muốn sao chép nội dung của nó ở một vị trí đặc biệt trong buffer1mà không thay đổi phần còn lại của mục tiêu đệm, bạn có thể sử dụng như sau:

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

Tương tự, bạn có thể sử dụng cắt ở phía bên phải để chỉ sao chép một phần của buffer2.

+0

Điều gì xảy ra sau đó trong trường hợp "a = bytearray ([0,0,0]); b = bytearray ([1,1]); a [:] = b;" Bẫy bị thiếu ở đâu? – josgek

+0

@Lluis: Vâng, bạn đang tạo bản sao của bộ đệm chứa hai byte. Kết quả do đó cũng chứa hai byte. – NPE

+0

Đó là vấn đề của tôi. Tôi không muốn tạo một bản sao của buffer2 nhưng chuyển nội dung của nó sang buffer1. – josgek

Các vấn đề liên quan