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

QLa*_*nds 0 c++ java java-native-interface inputstream

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

谢谢,卡洛斯。

Jef*_*ffG 5

这是java代码

InputStream is = new FileInputStream("filename");

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

decodeAacBytes(inBuffer, bytesRead);
Run Code Online (Sandbox Code Playgroud)

和 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;
}
Run Code Online (Sandbox Code Playgroud)

这些值现在将在 inputBytes 数组中