最近项目想将比较重要的配置文件加密、综合考虑后决定用java jni实现,步骤如下

1.定义java本地接口

package com.msg.jni;public class JniMsg {static {try {String os = System.getProperty("os.name").toLowerCase();String path = "F:/opt/";System.out.println("work dir:" + path);if (os.contains("windows")) {System.load(path + "/ext/configlib.dll");} else if (os.contains("linux")) {System.load(path + "/ext/configlib.so");}} catch (Exception e) {e.printStackTrace();}}public native String[] getAllCate();}

2.生成c/c++头文件

执行 javah -jni -encoding utf-8 -classpath . com.sc.privatecloud.server.jni.JniMessage 命令生成头文件

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_msg_jni_JniMsg */#ifndef _Included_com_msg_jni_JniMsg
#define _Included_com_msg_jni_JniMsg
#ifdef __cplusplus
extern "C" {
#endif
/** Class:     com_msg_jni_JniMsg* Method:    getAllCate* Signature: ()[Ljava/lang/String;*/
JNIEXPORT jobjectArray JNICALL Java_com_msg_jni_JniMsg_getAllCate(JNIEnv *, jobject);#ifdef __cplusplus
}
#endif
#endif

3.visual studio2013编写c++代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"com_msg_jni_JniMsg.h"#define CATE_CONFIG_LENGTH  2char *cate[482] = { "vBtqcNkMKMZ86RvvhgzNhEBdI3mu4oitNWhOFYOpndsaWivNhZNjCt83AhDR4M9wuZ3Tkxydotb+E70kLxwfcg=="
, "uME16Cvnd9zH+QYuv8dOHJVBYVQvcLVc1/GhUJjKjcV4u1jhOYKljsX9vzuE0Dna"
};jstring   CharToJobjectArray(JNIEnv* env,char **p,int len){jclass objClass = (*env)->FindClass(env, "java/lang/String");jobjectArray strArray = (*env)->NewObjectArray(env,(jsize)len, objClass, 0);jstring jstr;int i = 0;for (; i<len; i++){jstr = (*env)->NewStringUTF(env, p[i]);(*env)->SetObjectArrayElement(env, strArray, i, jstr);}return strArray;}JNIEXPORT jobjectArray JNICALL Java_com_sc_privatecloud_server_jni_JniMessage_getAllCate
(JNIEnv *env, jobject j){return CharToJobjectArray(env,cate,CATE_CONFIG_LENGTH);}

通过visual studio编译成动态链接库configlib.dll ,配置如下

4.测试

public class DemoTest {public static void main(String args[]) {JniMsg jnimsg=new JniMsg();String [] config= jnimsg.getAllCate();for(String c:config) {System.out.println(c);}}}输出:
vBtqcNkMKMZ86RvvhgzNhEBdI3mu4oitNWhOFYOpndsaWivNhZNjCt83AhDR4M9wuZ3Tkxydotb+E70kLxwfcg==
uME16Cvnd9zH+QYuv8dOHJVBYVQvcLVc1/GhUJjKjcV4u1jhOYKljsX9vzuE0Dna

web.sendcloud.net

java调用c/c++相关推荐

  1. eclipse java调用c 代码吗_linux下通过eclipse开发用java调用c程序的方法

    linux下通过eclipse开发用java调用c程序的方法: 1.先建立好java工程并建立java文件如下: public class testso {     static {         ...

  2. Java调用C/C++编写的第三方dll动态链接库(zz)

    这里主要用的方法是JNI.在网上查资料时看到很多人说用JNI非常的复杂,不仅要看很多的文档,而且要非常熟悉C/C++编程.恐怕有很多人在看到诸如此类的评论时已经决定绕道用其他方法了.本文将做详细的介绍 ...

  3. 使用JNA,让java调用原生代码

    JNA定义: JNA:java Native Access,是SUN公司开发的基于JNI的框架.JNI使得Java可以调用原生的c或者c++代码. JNA与JNI(Java Native Interf ...

  4. java无阻塞执行脚本,JAVA调用Shell脚本-及阻塞的解决方法

    JAVA调用Shell脚本--及阻塞的解决办法 用java调用shell,使用 Process p=Runtime.getRuntime().exec(String[] cmd); Runtime.e ...

  5. Java 调用Oracle的存储过程

    2019独角兽企业重金招聘Python工程师标准>>> 1.创建存储过程的语句: 1.表结构:①:create table TESTA(A_ID VARCHAR2(10) not n ...

  6. Java调用ocx控件以及dll

    2019独角兽企业重金招聘Python工程师标准>>> http://lvqingboy-163-com.iteye.com/blog/769358 通过Java调用OCX控件有几种 ...

  7. java 调用c/c++

    2019独角兽企业重金招聘Python工程师标准>>> java 调用c/c++ 第一步: 编写java程序:如-- public class Pxy { static{ //加载动 ...

  8. java调用cd传输_Java调用Linux命令(cd的处理)

    一.Java调用Linux系统的命令非常简单 这是一个非常常用的调用方法示例: 1 publicString executeLinuxCmd(String cmd) {2 System.out.pri ...

  9. 用Java调用WebService

    这是一个用Java调用C#版WebService接口的例子: C#接口: Java代码 <SPAN style="FONT-SIZE: 11px"> using Sys ...

  10. pytorch移动端教程 Java调用libtorch

    将模型转为libtorch模型之后 剩下的就是移动端是事情了 也就是使用java调用模型因为 libtorch 支持移动端且支持java调用 其实你使用java再电脑做做测试最好 但是不得不说libt ...

最新文章

  1. 互联网协议 — TLS 传输层安全协议
  2. keil debug时用断点管理抓取变量变化
  3. 【软考-软件设计师】CPU的功能
  4. spring部分注解
  5. 一个countDown在多线程调度下使用不当的分享
  6. Eclipse的SVN使用
  7. c++for循环求最大公约数_C/C++编程笔记:C语言 for 循环精讲!实例讲解带你吃透...
  8. 流媒体地址文件制作方法
  9. nginx对listen端口的优化 -- 第一篇
  10. MathType7数学公式编辑使用计算详细教程
  11. matlab 整数规划 非线性,非线性整数规划matlab
  12. 计算机主板提示ahci,映泰主板设置硬盘模式AHCI或IDE的教程
  13. JAVA中黄金分割点的问题
  14. 【 Laravel 工具包推荐--角色/权限管理】
  15. gimp 架构_GIMP添加插件..doc
  16. 联合利华vs乡镇企业
  17. 供应链:WMS库内管理设计
  18. element上传图片的时候额外参数
  19. uni-app小程序自定义样式的下拉选择框
  20. 橘子学ES03之Docker安装ELK+cerebro

热门文章

  1. 腾讯发布QQ影像软件 山寨picasa/美图
  2. scara工业机器人外观_scara工业机器人有哪些知名的品牌?
  3. FPGA和USB3.0通信
  4. Vue 学习——监听器(侦听器):普通监听和深度监听
  5. •连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组; •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
  6. MATLAB图像识别手写数字(第一篇:准备数据)
  7. 人脸识别-arcface损失函数
  8. 使用premiere插件输出unity3d直接可用的webm透明视频格式
  9. 第一章 开源GIS选型
  10. Vue + editor.Md 双向数据绑定Markdown编辑器(vue-editormd-wrap)