我愿意使用ByteBuffer
来进行JNI和C ++的线程间通信。我在文档中找不到ByteBuffer的getInt()
是否阻塞。那么,我需要做一些事情:
if(byteBuffer.asIntBuffer().hasRemaining())
byteBuffer.getInt();
Thread.sleep(1000);
或
byteBuffer.getInt();
会阻止睡眠是不必要的吗?
答案 0 :(得分:3)
根据the documentation,如果缓冲区中至少有四个字节,它将抛出BufferUnderflowException
。这表明它并没有阻止(因为“"阻止"”这个词根本没有出现在其文档页面上。)
但请注意,您的sleep
解决方案无法正常工作,因为您在致电sleep
之后正在进行getInt
电话,如果还没有足够的数据,它将会抛出异常。在调用getInt
之前,您需要确保缓冲区中至少有四个字节。