Java与C++语言在JNI下的交互
java环境下调用VC++编写的动态链接库文件
一,开发平台:
MyEclipse 6.0,VC++6.0
二,JNI基础知识:
JNI(java native interface),JAVA本地接口调用,目的是为了JAVA可以调用本地程序。
三,交互过程:
1,建立java类。例如,建立一个RSA加密解密的类:
package zkxx.ctais2.client.common;
public class RsaEncrypt {
/**
* @param args
*/
public native String GetKeys();
public native String Encrypt(String source,String PublicKey);
public native String Decrypt(String cipher,String PrivateKey);
static {
System.loadLibrary("RSAEncrypt");
}
public static void main(String[] args) {
}
}
2,生成C++语言的头文件:
1)注意:利用javah工具生成头文件需要注意,类的包结构,和class文件存储的路径。
例如:本地class文件存储路径:E:\lclai\lclai\src\
包结构应为:E:\lclai\lclai\src\com\org\lclai
RsaEncrypt.java应该存放在包路径下。
2)CMD命令提示符下进入E:\lclai\lclai\src\com\org\lclai路径
输入命令:javac RsaEncrypt.java
回车。
把生成的class文件拷贝到路径E:\lclai\lclai\src\
CMD命令提示符下进入E:\lclai\lclai\src\
输入命令:javah -classpath E:\lclai\lclai\src -jni E:\lclai\lclai\src\com\org\lclai\RsaEncrypt
回车。
在路径E:\lclai\lclai\src\便会生成以包结构和类名结合的头文件。
3,编写cpp文件
cpp文件头需要包含刚刚生成的.h文件,此外还需要包含jni.h.
// RSAEncrypt.cpp : Defines the initialization routines for the DLL.
//
#include "stdafx.h"
#include "RSAEncrypt.h"
#include "CryptoPP32.h"
#include "zkxx_ctais2_client_common_RsaEncrypt.h"
#include "jni.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//
// Note!
//
// If this DLL is dynamically linked against the MFC
// DLLs, any functions exported from this DLL which
// call into MFC must have the AFX_MANAGE_STATE macro
// added at the very beginning of the function.
//
// For example:
//
// extern "C" BOOL PASCAL EXPORT ExportedFunction()
// {
// AFX_MANAGE_STATE(AfxGetStaticModuleState());
//
相关文档:
Properties props=System.getProperties(); //系统属性
System.out.println("Java的运行环境版本:"+props.getProperty("java.version"));
System.out.println("Java的运行环境供应商:"+props.getProperty("java.vendor"));
System.out.println("Java供应商的URL:"+props.getProperty("java.vendor.url"));
Syste ......
/*
ArrayList是最常用的List实现类,内不是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能含有“空隙”,当数组大小不满足时需要增加存储能力,就要将已有数组数据复制到新的存储空间中。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动,代价比较高。因 ......
Java json lib
根据http://www.javaeye.com/topic/561368谈到的一个jackson的json序列化工具性能比json-lib等要好
无论是在低并发还是高并发的情况下,时间性能上,jackson使用重用ObjectMapper方式大大优于使用json-lib方式,甚于jackson使用非重用ObjectMapper方式也略优于json-lib方式。另外也可以看出,jackson在重用 ......
接触了JTAPI开发一段时间,刚开始接触时,非常头大,很多概念不好理解。 先列个框架,记录一下自己的学习过程。
一、JTAPI (Java Telephony API )
在JTAPI之前,每个公司都是各自的一套CTI开发接口。为了统一业界标准,SUN公司推出了jtapi标准接口。该接口定义了呼叫中心中的很多对象,如Address,Agen ......