2

私は次のようにPythonでバッファオブジェクトを作成しました:

f = io.open('some_file', 'rb')
byte_stream = buffer(f.read(4096))

byte_streamSWIGを介してC関数にパラメーターとして渡しています。次のようなデータを変換するためのタイプマップがあります。

%typemap(in) unsigned char * byte_stream {
    PyObject *buf = $input;
    //some code to read the contents of buf
}

バグがbyte_streamの実際のコンテンツ/値に到達できないいくつかの異なることを試しました。byte_streamC APIを使用してコンテンツを変換またはアクセスするにはどうすればよいですか?Cデータをバッファに変換する方法はたくさんありますが、逆の方法で見つけることはできません。このオブジェクトをgcbで調べてみましたが、どちらも、またはデータが含まれていることを示す値もありません。

(ファイルからデータを読み取るときにデータを文字列に変換するオーバーヘッドを回避したいので、バッファーを使用しています)Linuxでpython2.6を使用しています。

--ありがとうPavel

4

2 に答える 2

2

ファイルからデータを読み取るときにデータを文字列に変換するオーバーヘッドを回避したいので、バッファを使用しています

あなたは何も避けていません。文字列はすでにread()メソッドによって作成されています。を呼び出すbuffer()と、その文字列を指す追加のバッファオブジェクトが作成されます。

バッファオブジェクトが指すメモリを取得する場合は、を試してくださいPyObject_AsReadBuffer()http://docs.python.org/c-api/objbuffer.htmlも参照してください。

于 2010-02-04T15:05:11.913 に答える
1

ファイルオブジェクトでメソッドを使用するとすぐreadに、データはオブジェクトに変換されstrます。メソッドを呼び出してbufferも、それはいかなる種類のストリームにも変換されません。文字列オブジェクトを作成するオーバーヘッドを回避したい場合は、ファイルオブジェクトをCコードに渡して、CAPIを介し使用するだけです。

于 2010-01-24T21:31:51.017 に答える