私はいくつかのソケットIOを行い、バッファとしてbytearrayオブジェクトを使用しています。中間の文字列オブジェクトの作成を避けるために、以下に示すようにcsock.recv_intoを使用してこのバッファにオフセットを持つデータを受け取りたいとします。残念ながら、bytearはこのように使用できないようで、以下のコードは機能しません。bytearray with socket.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
は「doesnのこと、これを行うために、よりエレガントな方法があります中間の文字列をコピーする必要がありますか?
あなたが取得しているエラーは何ですか?どのバージョンのPythonを(正確に)使用していますか? http://bugs.python.org/issue7827は、これがPython 2.7.2で修正されていることを示しています。 – nneonneo
pythonのバージョンは2.7.3です。そして、これはそのバグに関連していません... csock.recv_into(buf)はうまく動作します。可能でないことは、次のように使用することです:csock.recv_into(buf [read:])それで、元のbufオブジェクトは更新されません。 – cyann