używanie bytearray z socket.recv_into
Robię trochę gniazda IO i używam obiektu bytearray jako bufora. Chciałbym otrzymywać dane z przesunięciem do tego bufora za pomocą csock.recv_into, jak pokazano poniżej, aby uniknąć tworzenia pośrednich obiektów ciągu. Niestety wydaje się, że bytearrays nie może być używany w ten sposób, a poniższy kod nie działa.
buf = bytearray(b" " * toread)
read = 0
while(toread):
nbytes = csock.recv_into(buf[read:],toread)
toread -= nbytes
read += nbytes
Zamiast tego używam poniższego kodu, któryrobi użyj tymczasowego ciągu (i działa) ...
buf = bytearray(b" " * toread)
read = 0
while(toread):
tmp = csock.recv(toread)
nbytes = len(tmp)
buf[read:] = tmp
toread -= nbytes
read += nbytes
Czy jest to bardziej elegancki sposób, który nie wymaga kopiowania ciągów pośrednich?