Java Native Interface--在本地方法中与Java进行交互一

1, 在本地方法中访问Java字符串

Java程序向本地方法传递String是以jstring的形式,它不同于C的字符串类型(char *),如果你在代码中直接打印jstring,很可能在虚拟机中引起冲突。例如就不能象这样使用Jstring:

JNIEXPORT jstring JNICALLJava_Prompt_getLine(JNIEnv *env, jobject obj, jstring prompt){    printf("%s", prompt);    ...

本地方法代码必须使用Jni函数把Java字符串转化为本地字符串。Jni支持本地Unicode 和 UTF-8字符串的转换。

访问Java字符串:你的本地方法需要调用GetStringUTFChars来正确打印从Java程序中传来的字符串。GetStringUTFChars把基于Unicode的Java字符串转化为UTF-8字符串,在jstring转化为UTF-8字符串后,你就可以直接把这个转化后的字符串传递给大多数C语言函数,像printf,例如:

JNIEXPORT jstring JNICALLJava_Prompt_getLine(JNIEnv *env, jobject obj, jstring prompt){    char buf[128];    const char *str = (*env)->GetStringUTFChars(env, prompt, 0);    printf("%s", str);    (*env)->ReleaseStringUTFChars(env, prompt, str);    ...

本地方法也能够通过Jni函数NewStringUTF构造一个新的字符串,例如:

    ...    scanf("%s", buf);    return (*env)->NewStringUTF(env, buf);}

使用指针JNIEnv:本地方法必须通过指针访问和操作Java对象,如String!

其他访问Java字符串的Jni函数:

GetStringCharstakes the Java string and returns a pointer to an array of Unicode characters that comprise the string.

ReleaseStringChars:释放由Unicode字符组成的数组指针。

NewString:从由Unicode字符组成的数组中构造一个新Java String对象;

GetStringLength:返回由Unicode字符组成数组形式的字符串长度;

GetStringUTFLength:返回UTF-8格式的字符串的长度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值