JNI与Java互操作大数据阵列
我们正在java上制作视频流应用程序。 我们在h264编码和解码上使用JNI,但java上最大的问题是 所有数据必须通过复制从Java发送到JNI。 有一种称为ByteBuffers的解决方案,但当数据返回到java时,它就在ByteBuffers上。 我需要将数据返回到byte[]以生成数据。它再次进行复制 有一种ByteBuffer获取方法: ByteBuffer bb; ... bb.get(0)//但通过循环上的索引获取数据非常缓慢。。。 字节数据[]=新字节[bb.limit()]; bb.获取(数据);//这是一个“复制”再次制造数据 所以,我需要将ByteBuffer传递给JNI方法,并再次传递给在不复制的情况下生成数据 是否有任何解决方案可以在不复制的情况下将字节[]从jni获取到java make数据? 我听说过GetPrimitiveArrayCritical,但有些人称其为冻结JVM垃圾收集器 java上的mappedbytebuffer呢?JNI与Java互操作大数据阵列,java,java-native-interface,Java,Java Native Interface,我们正在java上制作视频流应用程序。 我们在h264编码和解码上使用JNI,但java上最大的问题是 所有数据必须通过复制从Java发送到JNI。 有一种称为ByteBuffers的解决方案,但当数据返回到java时,它就在ByteBuffers上。 我需要将数据返回到byte[]以生成数据。它再次进行复制 有一种ByteBuffer获取方法: ByteBuffer bb; ... bb.get(0)//但通过循环上的索引获取数据非常缓慢。。。 字节数据[]=新字节[bb.limit()];
我们可以将共享数据直接用作java上的byte[]数组。可能的重复不是真的,我想操纵java端返回的JNI数组,而不进行任何复制或重新创建。ByteBuffer似乎不是解决方案。GetPrimitiveArrayCritical似乎是解决方案,但它冻结了垃圾收集器。还有其他解决方案吗?