Jnative可以通过getvalueFromPointer方法来获得传出参数,但是如果传出参数是数组,又如何获得呢。首先你想到可能是通过如下方式获得:
public static void getIntValsFromPointer(int intVals[],Pointer pointer,int count) throws NativeException
{
int offset = 0;
for(int i = 0; i < count; i++)
{
pointer.getAsInt(offset);
offset += 4;
}
}
以上的代码是可行的,但是函数getAsInt()会是你的速度非常低下,如果你的速度上要求比
较高的话。那么我们有怎么来提高其速度呢?通过不断的摸索和测试,我给出如下的一段代
码可以较大的提高速度。
public static void getIntValsFromPointer(int intVals[],Pointer pointer,int count) throws NativeException
{
int offset = 0;
byte bytes[] = pointer.getMemory();
for(int i = 0; i < count; i++)
{
intVals[i] = bytesToInt(bytes, offset);
offset += 4;
}
}
public static int bytesToInt(byte[] bytes,int i)
{
int intval = bytes[i]&0xff;
intval |=(bytes[i+1]<<8)&0xff00;
intval |=(bytes[i+2]<<16)&0xff0000;
intval |=(bytes[i+3]<<24)&0xff000000;
return intval;
}
通过自己一次性获得指针内存,而把内存按字节去转化,效率得到了较大的提高。通过对
比测试,第二种方案比第一种方案在速度上有成千上万倍的提高,而且数组的结构越复杂,
数组越大,效率提高越明显。
分享到:
相关推荐
JNative是一个开源的Java本地接口(JNI)工具包,它简化了Java程序与本地代码之间的交互过程,使得开发者无需深入理解复杂的JNI接口就能实现跨语言调用。 **1. JNative的原理** JNative的核心是基于JNI(Java ...
jnative使用方法总结jnative使用方法总结jnative使用方法总结
TestJNative_Eclipse.rar 为MyEclipse工程 JNativeTest_VC.rar为VC ...主要写了一些JNative调用DLL的例子,包含了JNative回调函数的用法与指针的用法,以供参考,希望对使用JNative的开发人员有帮助 有问题大家一起讨论
**JNative API说明文档** ...通过深入理解和熟练使用JNative API,开发者可以解决特定场景下的性能问题,提升应用程序的效率。而Javadoc作为API文档,是开发者学习和使用JNative不可或缺的参考资料。
《深入理解JNative:Java调用DLL的桥梁》 在Java世界中,由于其平台无关性的特性,直接调用本地动态链接库(DLL)并非易事。然而,JNative库的出现,为Java程序员提供了一个方便的解决方案,使得Java能够无缝地与C/...
在Java程序中调用DLL(动态链接库)文件通常是通过JNI(Java Native Interface)来实现的,而JNative是JNI的一个封装库,它提供了一种更简洁的方式来...在实际开发中,应谨慎使用,确保调用的本地方法安全且性能高效。
Jnative是Java编程语言中的一个开源工具,它通过JNI(Java Native Interface)提供了一种高效、简洁的方式来实现Java与C/C++代码的交互。Jnative简化了JNI的复杂性,让开发者可以更专注于功能实现,而非底层细节。...
jnative包用于调用dll动态库,目前(2011-12-20)最新版本为1.4RC2,官方正式版本文档为1.3,详见官方地址: http://jnative.free.fr/docs/ 这是最新的帮助文档HTML离线包,希望对大家有帮助 Packages org.xvolks....
//以下部分使用qt编译到so,注意在函数声明前加 extern "C" //如extern "C" const char* getLocalHost(); JNative getstring = new JNative("libmylib.so", "getstring"); getstring.setRetVal(Type.STRING); ...
JNative 的优点在于它的易用性、数据类型处理的高效以及对回调函数的支持。在使用JNative之前,我们需要了解一些基本概念。例如,`libJNativeCpp.so`是适用于Linux平台的动态链接库,而`JNativeCpp.dll`则适用于...
使用这个库,开发者可以在Java代码中通过简单的接口调用C++函数,而无需深入理解JNI的底层细节。 4. **JNI函数注册**:在C++的DLL或共享库中,需要使用JNI定义的函数注册表来声明和导出可供Java调用的函数。这些...
解压后会得到三个文件:JNative.jar、JNativeCpp.dll和libJNativeCpp.so。JNative.jar是Java类库,需要放在Java的扩展目录下,通常是%JAVA_HOME%/jre/lib/ext。JNativeCpp.dll是Windows平台下的本地库,应放置在系统...
jNative可能提供了高效且方便的方式来操作这些大数据,可能是通过提供直接的内存映射或者更高效的I/O机制。 **标签解析:** "jnativ"这个标签进一步确认了该资源与jNative库有关,它是用户搜索和识别该JAR包的...
JNative的运用,尤其是在需要高效计算、操作系统级操作或者调用特定硬件接口的场景下,显得尤为关键。这份“JNative学习资料”正是为了帮助开发者深入理解和掌握这一技术而精心准备的。 一、JNative概述 JNative是...
《深入解析org.xvolks.jnative源码》 在Java世界中,为了实现与本地代码的交互,开发者经常需要借助JNI(Java Native Interface)技术。然而,JNI的使用门槛相对较高,涉及到C/C++编程,这给许多Java开发者带来了...
首先,让我们深入理解JNative.jar的核心概念。JNative.jar是一个包含Java本地接口(JNI)函数的库,使得Java开发者能够无缝地集成和调用本地(非Java)代码。它通常由两部分组成:Java层的API和本地层的实现。Java层...
本文将深入探讨JNative的工作原理、使用方法以及其在实际应用中的价值。 首先,JNative是一个Java Native Interface(JNI)的包装器,它简化了Java程序与本地代码之间的交互过程。JNI是Java官方提供的一个接口,...
标题中的“jnative调用动态库”指的是Java中使用JNative库来调用本地(操作系统级别的)动态链接库(DLL或SO文件)的技术。在Java中,为了与操作系统底层功能进行交互,比如调用C/C++编译的库,我们可以使用Java ...
《深入解析JNative:连接Java与C++的桥梁》 JNative,作为一款强大的库,为Java程序员提供了与C++代码交互的能力。它允许Java应用程序调用C++编写的动态链接库(DLL或.so),从而扩展了Java的功能,特别是在处理...