是ByteBuffer.getInt()阻塞?

时间:2013-04-04 15:59:48

标签: java c++ java-native-interface blocking bytebuffer

我愿意使用ByteBuffer来进行JNI和C ++的线程间通信。我在文档中找不到ByteBuffer的getInt()是否阻塞。那么,我需要做一些事情:

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

byteBuffer.getInt();

会阻止睡眠是不必要的吗?

1 个答案:

答案 0 :(得分:3)

根据the documentation,如果缓冲区中至少有四个字节,它将抛出BufferUnderflowException。这表明它并没有阻止(因为“"阻止"”这个词根本没有出现在其文档页面上。)

但请注意,您的sleep解决方案无法正常工作,因为您在致电sleep之后正在进行getInt电话,如果还没有足够的数据,它将会抛出异常。在调用getInt之前,您需要确保缓冲区中至少有四个字节