java本地方法如何调用其他程序函数,方法详解2
| 分类: Java类文章 |
static{
System.loadLibrary("testdecompress");//加载动态库testdecompress.dll
}
public native byte[] decompress(byte[] inbs,int hh,int ww);
public byte[] inbs;
public byte[] outbs;
public InputByte() {
}
}
#include
/* Header for class com_cchongda_decompress_TestDecompress */
#define _Included_com_cchongda_decompress_TestDecompress
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_cchongda_decompress_TestDecompress
* Method: decompress
* Signature: ([BII)[B
*/
JNIEXPORT jbyteArray JNICALL Java_com_cchongda_decompress_TestDecompress_decompress
(JNIEnv *, jobject, jbyteArray, jint, jint);
}
#endif
#endif
(1)#include "com_cchongda_decompress_TestDecompress.h"
(2)extern "C" int _stdcall Decompress(unsigned char *outimg,char* ezwimg,int hh,int ww);
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
{
int i =1;
unsigned char * buffer = new BYTE[92160];
jbyteArray temparr;
temparr = env->NewByteArray(92160);
char * parr;
jbyte *arr = env->GetByteArrayElements(barr,0);
parr = (char *)arr;
/*FILE *fp;
fp = fopen("C:\\11.dat","w");
fwrite(parr,1,4610,fp);
fclose(fp);*/
i=Decompress(buffer,parr,hh,ww);
//printf("%d",i);
env->SetByteArrayRegion(temparr, 0, 92160, (const signed char *)buffer);
env->ReleaseByteArrayElements(barr, (signed char *)parr, 0);
return temparr;
}
public class DbConnect {
public DbConnect() {
}
public Connection conn=null;
public Statement stat=null;
public PreparedStatement pstat=null;
public ResultSet rs=null;
private String Driver="com.mysql.jdbc.Driver";
private String url="jdbc:mysql://192.101.1.138:3306/fingerdb";
{
try{
Class.forName(Driver).newInstance();
}
catch(java.lang.IllegalAccessException iae){
iae.printStackTrace();
}
catch(java.lang.ClassNotFoundException cnf){
cnf.printStackTrace();
}
catch(java.lang.InstantiationException ie){
ie.printStackTrace();
}
}
try{
this.conn = java.sql.DriverManager.getConnection(url, "root", "");
}
catch(java.sql.SQLException e){
e.printStackTrace();
return conn;
}
public Statement getStat(){
Statement stat = null;
try{
stat = this.getConn().createStatement();
}
catch(SQLException sqle){
sqle.printStackTrace();
}
return stat;
}
public ResultSet getRs(String sql){
// String sql="select htzw1 from zwzpxxb where sbh=''";
ResultSet rs=null;
try{
rs = stat.executeQuery(sql);
}
catch(java.sql.SQLException sqle){
sqle.printStackTrace();
}
return rs;
}
}
(2)主类提供入口函数
import java.io.*;
public class Test {
public Test() {
}
public static void main(String[] args){
FileOutputStream fos = null;
TestDecompress td = new TestDecompress();
InputByte ib = new InputByte();
int hh = 360;
int ww = 256;
File file = new File("C:/uuu.bmp");
try{
fos = new FileOutputStream(file);
}
catch(Exception e){
e.printStackTrace();
}
DbConnect dbc = new DbConnect();
try{
dbc.stat = dbc.getConn().createStatement();
}catch(java.sql.SQLException sqle){
sqle.printStackTrace();
}
String sql1= "select wjt from wjt";
String sql2 = "select htzw1 from zwzpxxb where sbh='A026010239'";
Blob blob = null;
ResultSet rs1 = dbc.getRs(sql1);
try{
if (rs1.next()) {
blob = rs1.getBlob("wjt");
System.out.println("文件头的字节数:"+blob.length());
}
fos.write(blob.getBytes(1,(int)blob.length()),0,(int)blob.length());
}catch(Exception e){
e.printStackTrace();
}
blob =null;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ResultSet rs2 = dbc.getRs(sql2);
try{
if (rs2.next()) {
blob = rs2.getBlob("htzw1");
System.out.println("文件体的字节数:"+blob.length());
bos.write(blob.getBytes(1,(int)blob.length()),0,(int)blob.length());
ib.inbs=bos.toByteArray();
System.out.println("进入的字节数"+ib.inbs.length);
// System.out.print(ib.outbs.length);
bos.close();
}
}catch(Exception e){
e.printStackTrace();
}
try{
System.out.println("解压缩后的字节数:"+ib.outbs.length);
fos.write(ib.outbs, 0, ib.outbs.length);
fos.flush();
fos.close();
}
catch(Exception e){
e.printStackTrace();
}
}
该过程是从数据库中读取一个未压缩的指纹数据文件头和压缩的指纹数据文件体,调用解压缩方法解压后将完整的指纹数据输出到c:\uuu.bmp,输出结果如图所示:
java本地方法如何调用其他程序函数,方法详解2的更多相关文章
- Python3调用C程序(超详解)
Python3调用C程序(超详解) Python为什么要调用C? 1.要提高代码的运算速度,C比Python快50倍以上 2.对于C语言里很多传统类库,不想用Python重写,想对从内存到文件接口这样 ...
- java本地方法如何调用其他程序函数,方法详解
JNI是Java Native Interface的缩写,中文为JAVA本地调用.从Java 1.1 开始,Java Native Interface (JNI)标准成为java平台的一部分,它允许J ...
- java 通过反射机制调用某个类的方法
package net.xsoftlab.baike; import java.lang.reflect.Method; public class TestReflect { public s ...
- java多态性方法的重写Overriding和重载Overloading详解
java多态性方法的重写Overriding和重载Overloading详解 方法的重写Overriding和重载Overloading是Java多态性的不同表现.重写Overriding是父类与子类 ...
- C#虚函数virtual详解
在面向对象编程中,有两种截然不同的继承方式:实现继承和接口继承.在实现继承时候,在Java中,所有函数默认都是virtual的,而在C#中所有函数并不默认为virtual的,但可以在基类中通过声明关键 ...
- Scala进阶之路-Scala函数篇详解
Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ...
- 转载 LayoutInflater的inflate函数用法详解
http://www.open-open.com/lib/view/open1328837587484.html LayoutInflater的inflate函数用法详解 LayoutInflater ...
- Java NIO 的前生今世 之四 NIO Selector 详解
Selector Selector 允许一个单一的线程来操作多个 Channel. 如果我们的应用程序中使用了多个 Channel, 那么使用 Selector 很方便的实现这样的目的, 但是因为在一 ...
- php中的PDO函数库详解
PHP中的PDO函数库详解 PDO是一个“数据库访问抽象层”,作用是统一各种数据库的访问接口,与mysql和mysqli的函数库相比,PDO让跨数据库的使用更具有亲和力:与ADODB和MDB2相比,P ...
随机推荐
- WebAPI使用多个xml文件生成帮助文档(转)
http://www.cnblogs.com/idoudou/p/xmldocumentation-for-web-api-include-documentation-from-beyond-the- ...
- 如何利用花生壳和VisualSVN Server建立远程代码仓库
如何利用花生壳和VisualSVN建立远程代码仓库 最近由于项目需要,要远程访问实验室的svn服务器,但是实验室没有固定域名和ip,因此就打算用花生壳申请一个免费的域名构建一个服务器,再把Visual ...
- IOS开发之—— ShareSDK的使用
官方下载ShareSDK iOS:http://sharesdk.cn/ ShareSDK社会化分享 包含“社会化分享组件”“社会化登录组件”“第三方评论和赞”三大模块,并有详尽的数据统计后台,助力移 ...
- 20145208 《Java程序设计》第6周学习总结
20145208 <Java程序设计>第6周学习总结 教材学习内容总结 输入与输出 InputStream与OutputStream 从应用程序角度来看,如果要将数据从来源取出,可以使用输 ...
- split 方法的正确使用姿势
本文同步自我的个人博客:http://www.52cik.com/2015/11/02/split-skill.html 通过js获取 QueryString (location.search部分) ...
- 一句话概括下spring框架及spring cloud框架主要组件
作为java的屌丝,基本上跟上spring屌丝的步伐,也就跟上了主流技术.spring 顶级项目:Spring IO platform:用于系统部署,是可集成的,构建现代化应用的版本平台,具体来说当你 ...
- javascript继承(七)—用继承的方式实现照片墙功能
照片墙DEMO下载 注意:图片有四种类型:1可放大:2可拖动:3既可放大也可拖动:4都不行.由于每个图片的构造函数不同而不同(目前在火狐上调试的,其它的浏览器可能不行,请见谅,主要讲继承的思想.以后会 ...
- 每天一个linux命令(45):route命令
Linux系统的route 命令用于显示和操作IP路由表(show / manipulate the IP routing table).要实现两个不同的子网之间的通信,需 要一台连接两个网络的路由器 ...
- 团队作业 -- beta版本
下一阶段需要改进完善的功能 1界面布局 2方块颜色调整 下一阶段新增的功能 1分数排行榜 2撤销上一步操作 需要改进的团队分工 无. 按要求加上一起进行编码任务 需要改进的工具流程 使用github进 ...
- Easyui使用记录
一天就这搞了这几行. 1. if else 可以嵌套: 2. 子页面调用父页面js,需要使用top.父页面js的方法. <script type="text/javascript&qu ...
转载▼