java - 如何使用 jni 将数据从 java InputStream 移动到 C++ 中的 char *?

标签 java c++ java-native-interface inputstream

如何使用 JNI 将存储在 java InputStream 中的数据移动到 C++ 中的 char *?

谢谢, 卡洛斯。

最佳答案

这是java代码

InputStream is = new FileInputStream("filename");

int numBytesToRead = 1024;
byte[] inBuffer = new byte[numBytesToRead];
int bytesRead = is.read(inBuffer, 0, numBytesToRead);

decodeAacBytes(inBuffer, bytesRead);

jni代码是

jint Java_com_example_test_MainActivity_decodeAacBytes(JNIEnv * env, jobject this, jbyteArray input, jint numBytes)
{
    //copy bytes from java
    jbyte* bufferPtr = (*env)->GetByteArrayElements(env, input, NULL);
    char *inputBytes = malloc(numBytes * sizeof(char));
    memcpy(inputBytes, bufferPtr, numBytes);
    (*env)->ReleaseByteArrayElements(env, input, bufferPtr, 0);

    return 0;
}

这些值现在将在 inputBytes 数组中

关于java - 如何使用 jni 将数据从 java InputStream 移动到 C++ 中的 char *?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6369402/

相关文章:

java - 无法关闭 java.exe、JNI 调用

java - 远程主机在握手期间关闭连接 - 帮助菜鸟

java - 创建一个扩展 keyListener 的类

c++ - 如何计算预期的核心文件大小

c++ - 如何告诉 netbeans 关于 pthread_barrier_t 的信息

c++ - 继承静态变量成员,但分别共享给每一种继承类

java - Eclipse 显示错误,而 ndk_build 成功

java - Apache Arrow Plasma 客户端 - 无法连接到内存存储 (UnsatisfiedLinkError)

java - 使用排序键删除 Dynamodb 表中的 Dynamodb 项目

java - 无法实例化java中的类型