`
pyleaf
  • 浏览: 39411 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

JNI学习笔记

 
阅读更多

1、Java中装载dll库

System.loadLibrary(String);

 

本地方法

jint JNI_OnLoad(JavaVM* vm, void* reserved);(返回所需的JVM最低版本,如JNI_VERSION_1_2)

void JNI_OnUnload(JavaVM* vm, void* reserved);

 

2、基本数据类型对照

Java              C                字节

boolean        jboolean     1

byte              jbyte          1

char              jchar           2

short             jshort         2

int                 jint              4

long              jlong           8

float              jfloat           4

double          jdouble        8

 

JNI_FALSE = 0

JNI_TRUE = 1

 

3、字符串参数

jstring NewStringUTF(JNIEnv* env, const char bytes[]);

以全0字节结尾的“改良UTF-8”字节序列,返回一个新的Java字符串对象,或NULL

 

jsize GetStringUTFLength(JNIEnv* env, jstring string);

返回进行UTF-8编码所需的字节个数。(不计算作为终止符的全0字节)

 

const jbyte* GetStringUTFChars(JNIEnv* env, jstring string, jboolean* isCopy);

返回“改良UTF-8”编码的字符串的指针,或者当不能构建字符数组时返回NULL。直到ReleaseStringUTFChars函数调用前,该指针一直有效。isCopy如果进行了复制,则填入JNI_TRUE,否则填入JNI_FALSE。

 

void ReleaseStringUTFChars(JNIEnv* env, jstring string, const jbyte bytes[]);

通知虚拟机本地代码不再需要通过bytes访问Java字符串

 

void GetStringRegion(JNIEnv* env, jstring string, jsize start, jsize length, jchar *buffer);

将一个UTF-16双字节序列从字符串复制到用户提供的缓存中。缓存必须足够长,最坏情况下,要复制3*length个字节。

 

void GetStringUTFRegion(JNIEnv* env, jstring string, jsize start, jsize length, jchar *buffer);

将一个“改良UTF-8”字符序列从字符串复制到用户提供的缓存中。缓存必须足够长,最坏情况下,要复制3*length个字节。

 

jstring NewString(JNIEnv* env, const jchar chars[], jsize length);

根据Unicode字符串返回一个新的Java字符串对象,或NULL

env         JNI接口指针

chars      以null结尾的UTF-16字符串

length    字符串中字符的个数

 

jsize GetStringLength(JNIEnv* env, jstring string);

返回字符串中字符的个数

 

const jchar* GetStringChars(JNIEnv* env, jstring string, jboolean* isCopy);

返回Unicode编码的字符串指针,或NULL。直到ReleaseStringChars函数调用前,该指针一直有效。isCopy如果进行了复制,则填入JNI_TRUE,否则填入JNI_FALSE。

 

void ReleaseStringChars(JNIEnv* env, jstring string, const jchar chars[]);

通知虚拟机本地代码不再需要通过bytes访问Java字符串

 

4、访问域

jfieldID GetFieldID(JNIEnv *env, jclass cl, const char name[], const char fieldSignature[]);

返回类中一个域的标识符。fieldSignature 编码签名(见5)

 

Xxx GetXxxField(JNIEnv *env, jobject obj, jfieldID id);

返回域的值。域类型Xxx是Object、Boolean、Byte、Char、Short、Int、Long、Float、或Double之一

 

void SetXxxField(JNIEnv *env, jobject obj, jfieldID id, Xxx value);

把某个域设置为一个新值。域类型Xxx是Object、Boolean、Byte、Char、Short、Int、Long、Float、或Double之一

 

jfieldId GetStaticFieldID(JNIEnv *env, jclass cl , const char name[] , const char fieldsignature[]);

返回某类型的一个静态域的标识符。fieldSignature 编码签名(见5)

 

Xxx GetStaticXxxField(JNIEnv *env, jclass cl , jfieldID id);

返回某静态域的值

 

void SetStaticXxxField(JNIEnv *env, jclass cl , jfieldID id , Xxx value);

把某个静态域设置为一个新值

 

5、编码签名

签名                         类型

B                             byte

C                             char

D                             double

F                             float

I                              int

J                              long

S                             short

V                             void

Z                             boolean

[                              数组

 

例:字符串数组  ->  [Ljava/lang/String;

      float[][]     ->  [[F

 

完整方法签名: (参数类型...)返回值类型

例:接收两个整型参数并返回一个整型参数的方法编码    ->    (II)I

例:void print(String s)                                         ->    (Ljava/lang/String;)V

例:Employee(java.lang.String, double, java.util.Date)    ->   (Ljava/lang/String;DLjava/util/Date;)V

 

查看类的方法签名:javap -s -private Employee

分享到:
评论

相关推荐

    JNI学习笔记.doc

    ### JNI学习笔记详解 #### 一、JNI简介 JNI(Java Native Interface)是Java平台提供的一种强大机制,它允许Java程序直接调用本地代码(通常是C或C++编写)。这为Java应用程序带来了额外的灵活性,使得开发者能够...

    android JNI 学习笔记.doc

    ### Android JNI 学习笔记详解 #### 一、JNI简介 JNI(Java Native Interface)即Java本地接口,是Java平台标准的一部分,它允许Java代码和其他语言(如C、C++等)编写的本地代码进行交互。在Android开发中,通过...

    java与c++交互(JNI学习笔记)

    ### Java与C++交互(JNI学习笔记) #### 一、Java类型与C/C++类型对应关系 在Java Native Interface (JNI) 中,Java 和 C/C++ 的数据类型有着明确的对应关系。理解这些对应关系是实现Java与C++交互的基础。 - **...

    黑马程序员JNI学习笔记

    针对所有初学JNI的人员的一个最全面的笔记,对于有过基础的朋友来说又是一个更好的助手. 省去了你自己去总结的时间,有更多的时间去敲代码. ------------黑马程序员学员-------------------

    Android JNI 学习笔记

    做为Android JNI还未入门的同志们,我这个总结的文档对你们真的很有用处,几乎大部分常规的Java访问C/C++以及C/C++访问Java的内容都包含在内。

    jni学习源码

    在“jni学习源码”这个资料中,包含了两个关键部分:`jni学习笔记.docx`和`myNDK`。`jni学习笔记.docx`很可能是对JNI基础知识的详细讲解,包括但不限于以下内容: 1. **JNI基本概念**:解释JNI的作用,为何要在Java...

    一个简单的Jni工程包括个人学习笔记

    这个压缩包“一个简单的Jni工程包括个人学习笔记”显然是一份关于JNI开发的学习资料,对于想要深入理解或初次接触JNI的开发者来说非常有价值。 JNI的核心在于提供了一种方式,使得Java代码能够调用本地(native)...

    Android学习笔记含JNI、USB和ftdi通信方式详解

    ### Android学习笔记含JNI、USB和ftdi通信方式详解 #### 项目四:多线程文件下载 在Android开发中,文件下载是一个常见的需求。利用多线程技术可以提高文件下载的速度,尤其在网络条件较差的情况下更为明显。多...

    Android 学习笔记——利用JNI技术在Android中调用、调试C++代码

    这篇“Android学习笔记——利用JNI技术在Android中调用、调试C++代码”将带你深入理解如何在Android应用中使用JNI来调用C++代码,以及如何进行调试。以下是对这一主题的详细阐述。 1. **JNI简介** JNI是Java平台的...

    关于JNI详解及笔记

    JNI,全称Java Native Interface,是Java平台标准的一部分,它为Java程序员提供了一种方法,可以在Java代码中调用本地(非Java)代码,反之...学习并熟练掌握JNI,对于提升Android应用的性能和功能有着至关重要的作用。

    JNI资料,笔记 (个人资料)

    本人从网上收集的一些关于JNI学习的资源,呵呵

    JAVA学习笔记————————

    9. **JNI(Java Native Interface)**:当JAVA代码需要调用本地(C/C++)代码时,JNI提供了桥梁,学习笔记会介绍如何使用JNI进行跨语言交互。 10. **JAVA标准库**:包括JDBC(数据库连接)、Swing(GUI开发)、JAXP...

    JNI笔记的相关内容

    #### 一、为什么学习JNI? JNI(Java Native Interface)技术能够增强Java虚拟机的功能,使得Java程序能够直接调用本地语言(如C或C++)编写的函数。这对于提高程序性能、实现特定硬件访问以及利用已有C/C++代码等...

    javase学习笔记(全)

    这份"javase学习笔记(全)"涵盖了刘意版传智播客课程的主要内容,是学习Java编程语言的重要参考资料。以下将对Java SE的一些关键知识点进行详细解释: 1. **Java基础**:Java的基础语法包括数据类型(如整型、浮点型...

    JNI CHM 文档查询 编程规范

    "biji.txt"可能是笔记、日志或其他辅助资料,它可能包含了一些开发者在学习和使用JNI过程中记录的信息。 总的来说,这个压缩包提供了一个全面的学习资源,涵盖了JNI的基础知识、调用流程、编程规范和实例,适合...

Global site tag (gtag.js) - Google Analytics