0

ByteBufferJNI と C++ のスレッド間通信を使用したいと考えています。ByteBuffergetInt()がブロックされているかどうかをドキュメントで見つけることができませんでした。それで、私は次のようなことをする必要がありますか:

if(byteBuffer.asIntBuffer().hasRemaining())
    byteBuffer.getInt();
Thread.sleep(1000);

また

byteBuffer.getInt();

ブロックするのでスリープは不要?

4

1 に答える 1

3

ドキュメントによると、バッファに少なくとも 4 バイトがない場合、 がスローされBufferUnderflowExceptionます。これは、ブロックされていないことを示唆しています (「ブロック」という単語がドキュメント ページにまったく表示されないという事実も同様です)。

ただし、 を呼び出した後に呼び出しを行っているため、ソリューションが機能しないことに注意してください。まだ十分sleepなデータがない場合は、既に例外がスローされています。を呼び出す前に、バッファーに少なくとも 4 バイトあることを確認する必要があります。sleepgetIntgetInt

于 2013-04-04T16:01:46.593 に答える