成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

我敢說:99.9%的程序員根本沒在項目中使用過Java的這個功能!

開發 前端
先說說使用JNI時有哪些坑吧,以避免小伙伴們重復踩坑,這里,大家需要注意的是:在使用JNI技術調用dll動態鏈接庫時,32位dll只能是32位JDK去調用,64位dll只能是64位JDK去調用。這個必須是這樣的,如果發現無法調用或者提示版本錯誤,首先要檢查下JDK的位數和dll的位數是否是對應的。

在Java語言出現之前,很多系統都是使用C和C++開發的。Java出現之后,由于其面向對象的思想更加符合人們的思維習慣,Java也不用像C和C++那樣需要程序員手動管理內存的分配和回收。說白了,就是簡單好用。由于Java的諸多優點,使其一躍霸榜編程語言前排很多年。

為了能夠和使用C和C++寫的程序進行交互,Java提供了本地方法的特性,也就是我們常說的JNI技術,然而,隨著互聯網的高速發展,分布式、微服務、大數據、云計算等技術和框架層出不窮,大多數支持多語言的框架基本上都是都過RPC或者Restful API進行調用。JNI這項Java中提供的強大功能,卻逐漸的被人遺忘了。

圖片圖片

為何使用JNI

最近,冰河在分析500多TB的數據,從500多TB的數據中分析用戶的行為習慣,以便為用戶提供更好的產品體驗和推薦更加適合用戶的產品。然而,在實現算法的過程中,使用Java語言開發的算法從500多TB的數據中,單獨分析某個用戶某段時間的行為時,耗費了極大的時間開銷。無論我如何優化算法,都不能達到預期的效果。很顯然,這不符合性能要求。

一名小伙伴對我說:試試C語言嘛。對啊!我為啥不試試用C語言寫算法啊,于是乎,使用C語言寫了算法,經過不斷的優化和調整,算是初步達到了算法性能要求。但是向數據大屏展示數據的時候,后端還是要以微服務的形式部署,于是我想到了Java中的JNI技術

注:后面單獨寫一篇我是如何分析500多TB數據的。

如何使用JNI

先說說使用JNI時有哪些坑吧,以避免小伙伴們重復踩坑,這里,大家需要注意的是:在使用JNI技術調用dll動態鏈接庫時,32位dll只能是32位JDK去調用,64位dll只能是64位JDK去調用。這個必須是這樣的,如果發現無法調用或者提示版本錯誤,首先要檢查下JDK的位數和dll的位數是否是對應的。

為了能夠讓小伙伴們順利的按照文章開發出自己的JNI程序,這里,我就詳細的說下如何開發一個JNI程序,主要分三個大的方面來說明如何使用JNI技術調用C和C++寫的程序。

圖片圖片

注意:本文中我使用的是jna Java類庫實現JNI開發。

開發dll動態鏈接庫

使用VS開發dll

VS新建項目

圖片圖片

輸入項目名稱

圖片圖片

選擇空項目,點擊完成

圖片圖片

圖片圖片

圖片圖片

創建完成后,將下面這段代碼復制進去:

#include <windows.h> 
#include <iostream>
#include <string>
using std::string;
using std::cin;
using std::cout;
using std::endl; 
 
#define MYLIBAPI extern "C" __declspec( dllexport ) 
 
//這的參數是必須的,也可以定義為.c頭文件
MYLIBAPI double add(double a,double b);
MYLIBAPI double mul(double a,double b);
MYLIBAPI char * getString(char* a);
 
double add(double a,double b){  
    return a + b;  
}
 
double mul(double a,double b){
 return a*b;
}
//定義了一個返回java String類型的參數
char * getString(char* a){
 char* b ="this is test";
 return strcat(a,b);
}

這里要注意的是:java的String和cpp的String不一樣的,其對應的是char,如果要用cpp的string不是亂碼就是調用失敗。

使用VS生成dll

這里變成Release,點擊配置管理器配置x64版本,這樣生成的dll就是x64版本的,這點非常重要。

圖片圖片

圖片圖片

配置完成以后右擊項目點擊生成按鈕。

圖片圖片

這一頓操作下來,基本就能夠正確的生成dll了,如果不能生成,極有可能是你的姿勢不對,照著文章重新弄一遍,如果還是不行,你就加我微信(hacker_binghe)問我吧。

VS生成的dll文件在哪個位置呢?別急,我們繼續。

右擊項目

圖片圖片

這里要注意的是在上級目錄!不要想當然打開的項目位置然后直接就去x64去找了,根本沒用!里面沒有dll,是在上級目錄,上級目錄 的x64位置。

圖片圖片

圖片圖片

開發Java程序

導入Maven依賴

新建Maven項目后,在Maven的pom文件中引入如下依賴。

<!-- https://mvnrepository.com/artifact/net.java.dev.jna/jna -->
<dependency>
    <groupId>net.java.dev.jna</groupId>
    <artifactId>jna</artifactId>
    <version>5.3.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/net.java.dev.jna/jna-platform -->
<dependency>
    <groupId>net.java.dev.jna</groupId>
    <artifactId>jna-platform</artifactId>
    <version>5.3.1</version>
</dependency>

指定dll位置

我個人就放在這個lib包下面,這樣導入這個包的時候可以寫絕對路徑也可以寫相對路徑。

編寫代碼

注意:這里定義的接口方法名稱需要和dll中的方法名稱一致。

package com.binghe.jni;
 
import com.sun.jna.Library;
import com.sun.jna.Native;
 
/**
 * @author binghe
 * @description: 測試JNI程序
 */
public class JnaTest {
    public interface TestProject extends Library {
        TestProject INSTANCE = (TestProject) Native.load("src/main/lib/testDll.dll",
                JnaTest.TestProject.class);
        public double add(double i, double j);
        public double mul(double i, double j);
        public String getString(String a);
 
    }
 
    public static void main(String[] args) {
 
        System.out.println(TestProject.INSTANCE.add(20.11,20.0));
        System.out.println(TestProject.INSTANCE.mul(16.9,20.89));
        System.out.println(TestProject.INSTANCE.getString("我現在正在測試dllgihjb"));
    }
}

運行Java程序

直接運行main方法,得到如下輸出結果。

圖片圖片

大功告成~~

責任編輯:武曉燕 來源: 冰河技術
相關推薦

2025-03-17 07:46:41

2021-03-18 13:58:43

程序員技能開發者

2013-03-28 15:50:37

程序員Java

2009-03-26 09:22:05

2009-06-24 17:34:58

使用JSF的經驗

2018-09-10 09:18:30

程序員領導加班

2019-10-24 09:29:04

程序員程序員節女朋友

2019-07-10 09:05:14

程序員開源軟件軟件

2012-09-18 10:05:51

程序員我的歌聲里程序員的歌

2024-04-01 00:00:00

Redis緩存服務消息隊列

2024-06-13 08:50:16

Macshell 工具命令行工具

2019-06-18 14:59:43

程序員編程加班

2013-11-29 13:05:07

程序員工作

2015-06-29 09:56:08

2021-03-22 08:58:23

程序員產品經理

2009-06-02 13:43:04

程序員定義職場

2013-06-08 14:12:13

程序員招聘

2010-03-02 10:13:56

程序員面試

2012-05-25 10:54:24

程序員

2015-09-01 11:17:53

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一区二区不卡 | 韩日视频在线观看 | 极品粉嫩国产48尤物在线播放 | 国产成人高清视频 | 久久精品一区 | 国产一区二区久久 | 婷婷五月色综合香五月 | 欧美日韩亚洲一区 | 精品一区二区在线观看 | 国产精品国产a级 | 国际精品鲁一鲁一区二区小说 | 国产亚洲欧美日韩精品一区二区三区 | 999精品在线| 精品一区电影 | 亚洲美女一区二区三区 | 伊人伊成久久人综合网站 | 日韩精品一区二区三区高清免费 | 欧美午夜影院 | 91亚洲国产亚洲国产 | 亚洲狠狠| 国产精品久久久久久久久久免费看 | 美女在线视频一区二区三区 | 国产美女在线观看 | 中文字幕精品一区二区三区精品 | 久久精品网| 国产精品久久久久久久久久久久 | av影音| 精品久久久久久久久久久 | 亚洲日本欧美日韩高观看 | www日本高清 | 91精品国产综合久久久久久丝袜 | 精品国产乱码久久久久久牛牛 | 成人综合一区 | 91精品国产乱码久久久久久 | 亚洲欧美中文日韩在线v日本 | 天堂av免费观看 | 欧美激情精品久久久久久 | 97日韩精品 | 日本久久网 | 亚洲精品久久久蜜桃网站 | 婷婷激情综合 |