0

私は次のようなメソッドを書き込もうとしましたInputStream:read(byte[] buffer,int offset,int length)

/*
 * Class:     com_readium_ResourceStream
 * Method:    readNative
 * Signature: ([BII)I
 */
JNIEXPORT jint JNICALL Java_com_readium_ResourceStream_readNative
  (JNIEnv *, jobject, jbyteArray, jint, jint);

paramsからuint_8配列をjbyteArrayに書き込むにはどうすればよいですか?

4

1 に答える 1

2

これが私の答えです。C++ コンパイル ユニットとしてコンパイルする必要があります。それ以外の場合は、env を最初のパラメーターとして渡す必要があります (つまり、env->GetArrayLength(...); c では GetArrayLength(env, ...) になります)。

/*
 * Class:     com_readium_ResourceStream
 * Method:    readNative
 * Signature: ([BII)I
 */
JNIEXPORT jint JNICALL Java_com_readium_ResourceStream_readNative
  (JNIEnv *env, jobject obj, jbyteArray buffer, jint offset, jint len)
{
  jint readed;
  // Read data and set readed

  jboolean isCopy;
  jsize arrayLen = env->GetArrayLength(buffer);
  jbyte* array = env->GetByteArrayElements(env, buffer, &isCopy);

  // Use array here

  env->ReleaseByteArrayElements(buffer, array, 0);
  return readed;
}

覚えておいてください、Javaバイトは常に署名されています。

于 2013-06-11T09:13:12.573 に答える