Is it necessary to convert char* to jbyteArray, then call java String\'s contructor to generate a jstring? How else can it be done? Please help.
static in
it is better to return byte[] to java rather than jstring due to the difference between UTF string in java and c string.it's much easier to deal encoding problem in java
in java:
byte[] otherString = nativeMethod("javastring".getBytes("UTF-8"))
in c++:
jbyte* javaStringByte = env->GetByteArrayElements(javaStringByteArray, NULL);
jsize javaStringlen = env->GetArrayLength(javaStringByteArray);
std::vector vjavaString;
vjavaString.assign(javaStringByte , javaStringByte + tokenlen);
std::string cString(vjavaString.begin(), vjavaString.end());
//
// do your stuff ..
//
jsize otherLen = otherCString.size();
jbyteArray otherJavaString = env->NewByteArray(otherLen);
env->SetByteArrayRegion(otherJavaString , 0, otherLen , (jbyte*) &otherJavaString [0]);
env->ReleaseByteArrayElements(javaStringByteArray, javaStringByte , JNI_ABORT);
return otherJavaString ;
in java again:
new String(otherString);