打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Jnative使用深入解析——高效获得传出参数(数组)
userphoto

2012.09.04

关注

Jnative可以通过getvalueFromPointer方法来获得传出参数,但是如果传出参数是数组,又如何获得呢。首先你想到可能是通过如下方式获得:


Java代码  
  1. <span style="font-size: small;">  public static void getIntValsFromPointer(int intVals[],Pointer pointer,int count) throws NativeException  
  2.     {  
  3.         int offset = 0;  
  4.         for(int i = 0; i < count; i++)  
  5.         {  
  6.             pointer.getAsInt(offset);  
  7.             offset += 4;  
  8.         }  
  9.     }</span>  

 


以上的代码是可行的,但是函数getAsInt()会是你的速度非常低下,如果你的速度上要求比


较高的话。那么我们有怎么来提高其速度呢?通过不断的摸索和测试,我给出如下的一段代


码可以较大的提高速度。


Java代码  
  1. <span style="font-size: small;">public static void getIntValsFromPointer(int intVals[],Pointer pointer,int count) throws NativeException  
  2.     {  
  3.         int offset = 0;  
  4.         byte bytes[] = pointer.getMemory();  
  5.         for(int i = 0; i < count; i++)  
  6.         {  
  7.             intVals[i] = bytesToInt(bytes, offset);  
  8.             offset += 4;  
  9.         }  
  10.     }  
  11.   
  12. public static int bytesToInt(byte[] bytes,int i)  
  13.     {  
  14.         int intval = bytes[i]&0xff;  
  15.         intval |=(bytes[i+1]<<8)&0xff00;  
  16.         intval |=(bytes[i+2]<<16)&0xff0000;  
  17.         intval |=(bytes[i+3]<<24)&0xff000000;  
  18.         return intval;  
  19.     }</span>  

 


  通过自己一次性获得指针内存,而把内存按字节去转化,效率得到了较大的提高。通过对

 

比测试,第二种方案比第一种方案在速度上有成千上万倍的提高,而且数组的结构越复杂,

 

数组越大,效率提高越明显。


(###)

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C语言语法复习
java调用底层的几种方法
【JNI使用】在 Windows 中实现 Java 本地方法--C 之dozb的程序人生
Java调用C/C++编写的第三方dll动态链接库(非native API)
几种java调用dll的方式
java调用dll
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服