Android 将int16_t转换为jbytearray

Android 将int16_t转换为jbytearray,android,c,java-native-interface,android-ndk,Android,C,Java Native Interface,Android Ndk,我正在使用android中的本机库进行流式处理 以下是场景: 我将url传递给c文件,经过大量处理后,它将数据写入wav文件 我对C不太熟悉,但我能理解的是有一个int16\t指针,wav文件就是从这个指针编写的 问题是 有没有办法将int16\u t转换为jbytearray,这样我就可以将字节数组返回到我的java代码中 谢谢我不知道Android的第一件事,但是你可能想了解一下java.nio.ByteBuffer-可以让它们在本机内存中分配缓冲区(allocateDirect()),

我正在使用android中的本机库进行流式处理


以下是场景:

我将url传递给c文件,经过大量处理后,它将数据写入wav文件

我对C不太熟悉,但我能理解的是有一个
int16\t
指针,wav文件就是从这个指针编写的


问题是

有没有办法将
int16\u t
转换为
jbytearray
,这样我就可以将字节数组返回到我的java代码中


谢谢

我不知道Android的第一件事,但是你可能想了解一下
java.nio.ByteBuffer
-可以让它们在本机内存中分配缓冲区(
allocateDirect()
),这样本机函数就可以直接写入它。

你需要分配一个字节[],然后将WAV数据复制到其中。或者,创建一个跨越WAV数据的“direct”ByteBuffer,并将其传递到Java代码中

有关更多信息,请阅读和文档。特别是:

SetByteArrayRegion
NewDirectByteBuffer

您能提供更多详细信息吗?它与java无关,我的所有操作都需要在c代码中完成,无论是关于访问创建的变量还是传递它
,我都需要将int16\u t转换为jbytearray
,这对我来说很重要。@user503249:…这样我就可以将字节数组返回到我的java代码中。我的回答是试图告诉您为什么不需要这样做:您的C代码可以将其数据直接写入
ByteBuffer
对象使用的缓冲区。如果可能,您可以发布示例代码吗?因为我被c和java代码的混合弄糊涂了。我只掌握了一些C语言的基本知识,从未为此编写过任何代码-(