我愿意使用ByteBuffer
JNI 和 C++ 的线程间通信。我在文档中找不到 ByteBuffergetInt()
是否阻塞。那么,我是否需要执行以下操作:
if(byteBuffer.asIntBuffer().hasRemaining())
byteBuffer.getInt();
Thread.sleep(1000);
或者
byteBuffer.getInt();
会阻塞所以睡眠是不必要的?
我愿意使用ByteBuffer
JNI 和 C++ 的线程间通信。我在文档中找不到 ByteBuffergetInt()
是否阻塞。那么,我是否需要执行以下操作:
if(byteBuffer.asIntBuffer().hasRemaining())
byteBuffer.getInt();
Thread.sleep(1000);
或者
byteBuffer.getInt();
会阻塞所以睡眠是不必要的?
根据文档,如果缓冲区中没有至少四个字节,它将抛出BufferUnderflowException
. 这表明它不会阻塞(就像“阻塞”这个词根本没有出现在其文档页面上一样)。
但请注意,您的sleep
解决方案将不起作用,因为您是在sleep
调用之后进行调用getInt
,如果那里还没有足够的数据,这将已经引发异常。在调用之前,您需要确保缓冲区中至少有四个字节getInt
。