什么是JNI
java native interface(java本地接口)
ABI: application binary interface (应用程序二进制接口)
为什么要使用JNI
* 复用很多优秀的c/c++代码
- ffmpeg 多媒体播放器 
- opencv 图形识别引擎
- 7-zip  压缩
- opencore 视频播放
* 效率问题
- java代码跨平台,不直接操作硬件,虚拟机解释执行。垃圾回收机制。
- art 在安装apk应用程序的时候,把apk里面的dex翻译成机器码(apk的体积会变大)
- c代码直接操作硬件,程序员可以手工的释放内存
* 应用场景问题
- c代码可以直接操作硬件。
- java代码只能操作虚拟机(一次编译到处执行)
- 智能家居操作硬件
- 车载电脑(obd: onboard debug system)
* 特殊业务逻辑
- c代码反编译困难,调试困难。
- java代码反编译容易,很容易看懂。
怎么使用JNI
* 看懂c代码( 有c语言基础)
* 懂流程 (熟悉jni的规范)
* 熟练(NDK 工具 native develop kits)
#开发工具
dev-cpp.exe 
1. 轻量级开发工具
2. 编译器gcc c99标准
c语言helloworld
1.声明头文件,相当于java的导包。
#include <stdio.h> 
2.写main()方法 
main(){
}
3.为了观察程序执行的结果,需要调用windows系统的一个指令
system("pause"); 
C语言的基本数据类型
* java语言的8大基本类型 
- int   4byte  32位
- byte  1byte  8位
- short 2byte  16位
- long  8byte   64位
- float 4byte   32位
- double 8byte  64位
- boolean 1byte 8位
- char   2byte 16位
* c语言的基本数据类型
sizeof();获取一个数据类型的长度 
- char 1byte 8位 和java不同
- long 4byte 32位和java不同
- int  4byte 32位 和java一致
- float 4byte 32位 和java一致
- double 8byte  64位和java一致
- short 2byte  16位 还可以表示java里面的char
- 在c语言里面没有boolean类型,0假 非0真
- 在c语言里面没有byte类型 可以用char表示byte类型。
* 修饰符的作用
- signed 有符号
- unsigned 无符号
> 1000 0000(负0)   ->  0111 1111+1(取反加1 ) = 1000 0000(负128)
> 缓冲区溢出漏洞。本质原因就是c语言不检查数组下标。不检查内存空间的越界
##指针
指针就是 一块内存空间(内存地址)
* window 32位系统 寻址空间32位
        最多能表示出来4G内存地址的组合。
计算机有一些硬件设备需要占用一些内存地址。
留给用户的可用空间 不足3个G
* window 64位系统 寻址空间是64位
号的含义
* 如果跟着一种数据类型的后面int*  代表是一种指针变量, 存放的是一个内存地址。
* 如果\*号放在一个指针变量的前面,代表的是取地址里面数据的操作 \*p 把p地址里面存放的数据取出来
* x*y  相乘
指针变量和指针的概念
看世面上书的时候 指针变量和指针没什么区别
指针变量: 一个变量 int* p; p是指针变量
指针: 一块内存空间的地址
值传递和引用传递
* 准确讲只有值传递。调用子函数所有的操作,都是值传递。
引用传递,还是值传递,传递是对象的地址
所有程序执行的内存分配的特点。
            子函数一旦执行完毕后,内存空间会被系统回收。

JNI-java native interface(java本地接口)的更多相关文章

  1. android 学习随笔二十七(JNI:Java Native Interface,JAVA原生接口 )

    JNI(Java Native Interface,JAVA原生接口) 使用JNI可以使Java代码和其他语言写的代码(如C/C++代码)进行交互. 问:为什么要进行交互? 首先,Java语言提供的类 ...

  2. JNI(Java Native Interface)

    一.JNI(Java Native Interface)        1.什么是JNI:               JNI(Java Native Interface):java本地开发接口   ...

  3. Java Native Interface 六JNI中的异常

    本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 在这里只讨论调用JNI方法可能会出现的异常, ...

  4. Java Native Interface 五 JNI里的多线程与JNI方法的注册

    本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 JNI里的多线程 在本地方法里写有关多线程的 ...

  5. Java Native Interface 四--JNI中引用类型

    本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 JNI支持将类实例和数组类型(如jobjec ...

  6. Java Native Interface 二 JNI中对Java基本类型和引用类型的处理

    本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 Java编程里会使用到两种类型:基本类型(如 ...

  7. Java Native Interface Specification(JNI)

    Java Native Interface Specification(JNI) 使用场景: 需要的功能,标准的java不能提供 有了一个用其他的语言写好的工具包,希望用java去访问它 当需要高性能 ...

  8. 【详解】JNI (Java Native Interface) (四)

    案例四:回调实例方法与静态方法 描述:此案例将通过Java调用的C语言代码回调Java方法. 要想调用实例对象的方法,需要进行以下步骤: 1. 通过对象实例,获取到对象类的引用  => GetO ...

  9. 【详解】JNI (Java Native Interface) (三)

    案例三:C代码访问Java对象的实例变量   获取对象的实例变量的步骤: 1. 通过GetObjectClass()方法获得此对象的类引用 2. 通过类引用的GetFieldID()方法获得实例变量的 ...

  10. 【详解】JNI (Java Native Interface) (二)

    案例二:传递参数给C代码,并从其获取结果 注:这里传递的参数是基本类型的参数,在C代码中有直接的映射类型. 此案例所有生成的所有文件如下: (1)编写案例二的Java代码,如下: 这里我们定义了一个n ...

随机推荐

  1. 解决MarkDown打开出现:awesomium web-brower framework This view has crashed

    当在windows 8 以上操作系统安装markdown 的时候,可能会出现这样的错误 解决方法: 官网链接:http://markdownpad.com/faq.html#livepreview-d ...

  2. stl(set或map)

    https://nanti.jisuanke.com/t/41384 There are nnn points in an array with index from 111 to nnn, and ...

  3. P1455 搭配购买 (并查集+01背包)

    [题目描述] 明天就是母亲节了,电脑组的小朋友们在忙碌的课业之余挖空心思想着该送什么礼物来表达自己的心意呢?听说在某个网站上有卖云朵的,小朋友们决定一同前往去看看这种神奇的商品,这个店里有n朵云,云朵 ...

  4. P2876 [USACO07JAN]解决问题Problem Solving

    传送门 显然的 $dp$,设 $f[i][j]$ 表示做完第 $i$ 题,此月做的题的区间为 $[j,i]$ 需要的最少月数 每个月记得分成还钱并写新题,和只还钱分类讨论,不要搞成每个月强制做一题 那 ...

  5. 搜索(BFS)---计算在网格中从原点到特定点的最短路径长度

    计算在网格中从原点到特定点的最短路径长度 [[1,1,0,1], [1,0,1,0], [1,1,1,1], [1,0,1,1]] 题目描述: 1表示可以经过某个地方,求解从(0,0)位置到(tr,t ...

  6. SpringBoot中设置自定义拦截器

    SpringBoot中设置自动以拦截器需要写一个类继承HandlerInterceptorAdapter并重写preHandle方法 例子 public class AuthorityIntercep ...

  7. Maven 集成Tomcat插件(引用)

    Maven已经是Java的项目管理标配,如何在JavaEE开发使用Maven调用Web应用,是很多同学关心的问题.本文将介绍,Maven如何介绍Tomcat插件. Maven Tomcat插件现在主要 ...

  8. 基于socket实现大文件上传

    import socket 1.客户端: 操作流程: 先拿到文件--->获取文件大小---->创建字典 1.制作表头 header  如何得到 他是一个二进制字符串 序列化得到 字典字符串 ...

  9. 关于Extjs获取容器和元素的方法

    1.当前对象的父对象(上级对象) this.ownerCt: 2.当前对象的下一个相邻的对象 this.nextSibling(); 3.当前对象的上一个相邻的对象 this.previousSibl ...

  10. python 脚本编译成可执行二进制(exe)

    本文python3,pyinstaller也支持py2 cmd下载模块pyinstaller 首先: pip install pyinstaller 其次: cmd下进入需要编译的xxx.py文件目录 ...