论坛首页 Java版

JNI,可用乎??

浏览 2150 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2004-09-03
现在在做一个项目,跟银行对接的系统,我们选择java开发,因为银行给我们的CRC,加密函数都是 C语言,参数大多是char*,有些甚至还是Struct CRC *指针。采用JNI调用C函数的话,对于指针类型的参数,我没有找到对应的Wrapper ,不知道JNI对这些本地语言的各种指针是怎么wrapper的?
大家伙对于JNI怎么看待?
有使用过它的麻?
它JNI执行的效率如何?
对资源的占用如何??
因为我们比较关心效率,所以这个问题我想先问一下大家伙!!
   
最后更新时间:2004-09-03
firebody 写道
... 银行给我们的CRC,加密函数都是 C语言,参数大多是char*,有些甚至还是Struct CRC *指针。


你可以先用 C 写一个 DLL 来调用银行给的库,对银行加密函数的参数加以包装,你的 Java 程序再通过 JNI 调用你写的 DLL。

firebody 写道
采用JNI调用C函数的话,对于指针类型的参数,我没有找到对应的Wrapper ,不知道JNI对这些本地语言的各种指针是怎么wrapper的?


Java 是没有指针的,你可以传递 byte[] 或者 String。

firebody 写道
大家伙对于JNI怎么看待?
有使用过它的麻?
它JNI执行的效率如何?
对资源的占用如何??
因为我们比较关心效率,所以这个问题我想先问一下大家伙!!


JNI 调用的是本地代码,效率/资源占用率肯定不会比直接用 Java 差。

编写 DLL 的时候要小心处理在 DLL 程序里使用的内存、指针,因为本地代码和 JVM 是同一进程,如果 DLL 导致了内存泄漏、进程崩溃会连累到 JVM。
   
0 请登录后投票
最后更新时间:2004-09-03
simonliu 写道
firebody 写道
... 银行给我们的CRC,加密函数都是 C语言,参数大多是char*,有些甚至还是Struct CRC *指针。


你可以先用 C 写一个 DLL 来调用银行给的库,对银行加密函数的参数加以包装,你的 Java 程序再通过 JNI 调用你写的 DLL。

firebody 写道
采用JNI调用C函数的话,对于指针类型的参数,我没有找到对应的Wrapper ,不知道JNI对这些本地语言的各种指针是怎么wrapper的?


Java 是没有指针的,你可以传递 byte[] 或者 String。

谢谢simonliu 得答复!
我还想问一下:
对结构指针参数怎么包装呢? 难道对于一个结构:
Struct Transaction_Message{
    long num,
    char  name[10+1],
     int   num2;
     char* pointer;
}
我们需要专门写一个这样得C Dll 码:
CallDllFunction( long num,char* name,int num2,char* pointer){

      struct trans=struct(num,name,num2,pointer);
      ...............
}
这样得话,确实可以,不过如果结构很长,那么Dll 函数参数就很多!这样有什么更好得解决办法码?
谢谢!
   
0 请登录后投票
最后更新时间:2004-09-03
jvm是没法管理本地方法内存使用的,所以本地方法质量一定要高,不然很容易出现core dump。至于速度,应该不成问题。
   
0 请登录后投票
最后更新时间:2004-09-03
引用
对结构指针参数怎么包装呢? 难道对于一个结构:
Struct Transaction_Message{
    long num,
    char  name[10+1],
     int   num2;
     char* pointer;
}
我们需要专门写一个这样得C Dll 码:
CallDllFunction( long num,char* name,int num2,char* pointer){

      struct trans=struct(num,name,num2,pointer);
      ...............
}
这样得话,确实可以,不过如果结构很长,那么Dll 函数参数就很多!这样有什么更好得解决办法码?


我不知道 JNI 接口能不能传递 Struct,没有试过,估计有困难。
我建议,如果参数很多的话,你可以考虑传递一个 XML 字符串,用 XML 来表示 Struct。
   
0 请登录后投票
论坛首页 Java版

跳转论坛:
JavaEye推荐