免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2297 | 回复: 0
打印 上一主题 下一主题

JNI入门二_字符串和字符串数组 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-28 23:14 |只看该作者 |倒序浏览
一。java中字符串的返回很容易,和其它如int类型没有什么区别,只是最后的时候需要做一下类型转换。
  JNIEXPORT jstring JNICALL Java_stringTest_displayString (JNIEnv * env, jclass obj){
   jstring jstr;
   char str[]="Hello World\n";
   jstr=env->NewStringUTF(str);
   return jstr;
  }
    给出java和c类型对应关系,以及String转换函数
      Java类型    本地类型    字节(bit)
      boolean    jboolean    8, unsigned
      byte    jbyte    8
      char    jchar    16, unsigned
      short    jshort    16
      int    jint    32
      long    jlong    64
      float    jfloat    32
      double    jdouble    64
      void    void    n/a
    访问String的一些方法:
      ◆GetStringUTFChars将jstring转换成为UTF-8格式的char*
      ◆GetStringChars将jstring转换成为Unicode格式的char*
      ◆ReleaseStringUTFChars释放指向UTF-8格式的char*的指针
      ◆ReleaseStringChars释放指向Unicode格式的char*的指针
      ◆NewStringUTF创建一个UTF-8格式的String对象
      ◆NewString创建一个Unicode格式的String对象
      ◆GetStringUTFLengt获取UTF-8格式的char*的长度
      ◆GetStringLength获取Unicode格式的char*的长度   
     
二。普通类型数组的访问方法不难,略过。字符串数组的访问比较特殊,我们可以看到javah出来的.h文件中JNIEXPORT jobjectArray JNICALL Java_GetLocalMac_getMacs(JNIEnv*, jobject)中返回的是jobjectArray而不是jstringArray,即需要把这些访问按照Object的类型来访问。
//为数组分配空间
  swArray = env->NewObjectArray(count,
   env->FindClass("java/lang/String"),
   env->NewStringUTF(""));
//SetObjectArrayElement刷新数组元素内容  
  for(i = 0; i SetObjectArrayElement(swArray, i, value) ;
这里用到的两个主要方法是:   
GetObjectArrayElement returns the object element at a given index.
SetObjectArrayElement updates the object element at a given index.
三。需要说明的一点是,我所用的是c++,用的编程平台是VS.net2003,c++和c在JNI方面有一些差异。以SetObjectArrayElement为例
    c的写法是,需要指定指针,并切将env做为第一参数 (*env)->SetObjectArrayElement(env, swArray, i, value)) ;
    而c++的写法,可以明显看出两者的区别 env->SetObjectArrayElement(swArray, i, value) ;

四。其它关于普通类型数组的访问,java自定义类中方法的访问,以及异常等问题不再写了,其实是不会-_-,目前还没用到。
    下面会再写一个本地程序访问java中的二维字符串数组的例子,原先在网上看到过一个,但是测试无法通过,自己修改了一下。
    另外给出Core Java 2 Volume II-Advanced Features 5th Edition中关于JNI一章的内容,还有用到JNI可以去sun的网站上下载官方的JNI docs 和Tutorial,地址在我的链接里都有。
   


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/22516/showart_161702.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP