`
fenger_chui
  • 浏览: 104098 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多

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;
	}

 


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

 

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

 

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

 

2
2
分享到:
评论

相关推荐

    jnative简单的使用

    JNative是一个开源的Java本地接口(JNI)工具包,它简化了Java程序与本地代码之间的交互过程,使得开发者无需深入理解复杂的JNI接口就能实现跨语言调用。 **1. JNative的原理** JNative的核心是基于JNI(Java ...

    jnative使用方法总结

    jnative使用方法总结jnative使用方法总结jnative使用方法总结

    JNative使用示例

    TestJNative_Eclipse.rar 为MyEclipse工程 JNativeTest_VC.rar为VC ...主要写了一些JNative调用DLL的例子,包含了JNative回调函数的用法与指针的用法,以供参考,希望对使用JNative的开发人员有帮助 有问题大家一起讨论

    JNative api说明文档

    **JNative API说明文档** ...通过深入理解和熟练使用JNative API,开发者可以解决特定场景下的性能问题,提升应用程序的效率。而Javadoc作为API文档,是开发者学习和使用JNative不可或缺的参考资料。

    JNative.jar以及JNative源码

    《深入理解JNative:Java调用DLL的桥梁》 在Java世界中,由于其平台无关性的特性,直接调用本地动态链接库(DLL)并非易事。然而,JNative库的出现,为Java程序员提供了一个方便的解决方案,使得Java能够无缝地与C/...

    在Java程序中使用JNative调用dll文件

    在Java程序中调用DLL(动态链接库)文件通常是通过JNI(Java Native Interface)来实现的,而JNative是JNI的一个封装库,它提供了一种更简洁的方式来...在实际开发中,应谨慎使用,确保调用的本地方法安全且性能高效。

    Jnative资源包源码

    Jnative是Java编程语言中的一个开源工具,它通过JNI(Java Native Interface)提供了一种高效、简洁的方式来实现Java与C/C++代码的交互。Jnative简化了JNI的复杂性,让开发者可以更专注于功能实现,而非底层细节。...

    JNative v1.3 docs

    jnative包用于调用dll动态库,目前(2011-12-20)最新版本为1.4RC2,官方正式版本文档为1.3,详见官方地址: http://jnative.free.fr/docs/ 这是最新的帮助文档HTML离线包,希望对大家有帮助 Packages org.xvolks....

    linux jnative 调用.so方法及附属全部库和源码

    //以下部分使用qt编译到so,注意在函数声明前加 extern "C" //如extern "C" const char* getLocalHost(); JNative getstring = new JNative("libmylib.so", "getstring"); getstring.setRetVal(Type.STRING); ...

    JNative用java调用动态库VC++

    JNative 的优点在于它的易用性、数据类型处理的高效以及对回调函数的支持。在使用JNative之前,我们需要了解一些基本概念。例如,`libJNativeCpp.so`是适用于Linux平台的动态链接库,而`JNativeCpp.dll`则适用于...

    jnative

    使用这个库,开发者可以在Java代码中通过简单的接口调用C++函数,而无需深入理解JNI的底层细节。 4. **JNI函数注册**:在C++的DLL或共享库中,需要使用JNI定义的函数注册表来声明和导出可供Java调用的函数。这些...

    使用JNative对条码打印机进行打印(转别人)

    解压后会得到三个文件:JNative.jar、JNativeCpp.dll和libJNativeCpp.so。JNative.jar是Java类库,需要放在Java的扩展目录下,通常是%JAVA_HOME%/jre/lib/ext。JNativeCpp.dll是Windows平台下的本地库,应放置在系统...

    jnative的jar包

    jNative可能提供了高效且方便的方式来操作这些大数据,可能是通过提供直接的内存映射或者更高效的I/O机制。 **标签解析:** "jnativ"这个标签进一步确认了该资源与jNative库有关,它是用户搜索和识别该JAR包的...

    JNative综合学习资料

    JNative的运用,尤其是在需要高效计算、操作系统级操作或者调用特定硬件接口的场景下,显得尤为关键。这份“JNative学习资料”正是为了帮助开发者深入理解和掌握这一技术而精心准备的。 一、JNative概述 JNative是...

    org.xvolks.jnative 源码

    《深入解析org.xvolks.jnative源码》 在Java世界中,为了实现与本地代码的交互,开发者经常需要借助JNI(Java Native Interface)技术。然而,JNI的使用门槛相对较高,涉及到C/C++编程,这给许多Java开发者带来了...

    JNative.jar 包

    首先,让我们深入理解JNative.jar的核心概念。JNative.jar是一个包含Java本地接口(JNI)函数的库,使得Java开发者能够无缝地集成和调用本地(非Java)代码。它通常由两部分组成:Java层的API和本地层的实现。Java层...

    jnative.rar

    本文将深入探讨JNative的工作原理、使用方法以及其在实际应用中的价值。 首先,JNative是一个Java Native Interface(JNI)的包装器,它简化了Java程序与本地代码之间的交互过程。JNI是Java官方提供的一个接口,...

    jnative调用动态库

    标题中的“jnative调用动态库”指的是Java中使用JNative库来调用本地(操作系统级别的)动态链接库(DLL或SO文件)的技术。在Java中,为了与操作系统底层功能进行交互,比如调用C/C++编译的库,我们可以使用Java ...

    jnative源码和文档,包含JNativeCpp.dll和libJNativeCpp.so

    《深入解析JNative:连接Java与C++的桥梁》 JNative,作为一款强大的库,为Java程序员提供了与C++代码交互的能力。它允许Java应用程序调用C++编写的动态链接库(DLL或.so),从而扩展了Java的功能,特别是在处理...

Global site tag (gtag.js) - Google Analytics