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?

questionAnswers(1)

yourAnswerToTheQuestion