JNI学习笔记

本文详细介绍了Java中装载dll库的过程,包括本地方法的使用、基本数据类型的对照,以及如何处理字符串参数。重点阐述了字符串的创建、获取长度、获取指针和区域复制等功能,并提供了实例说明。

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

代码下载地址: https://pan.quark.cn/s/bc087ffa872a "测控电路课后习题详解"文件.pdf是一份极具价值的学术资料,其中系统地阐述了测控电路的基础理论、系统构造、核心特性及其实际应用领域。 以下是对该文献的深入解读和系统梳理:1.1测控电路在测控系统中的核心功能测控电路在测控系统的整体架构中扮演着不可或缺的角色。 它承担着对传感器输出信号进行放大、滤除杂音、提取有效信息等关键任务,并且依据测量与控制的需求,执行必要的计算、处理与变换操作,最终输出能够驱动执行机构运作的指令信号。 测控电路作为测控系统中最具可塑性的部分,具备易于放大信号、转换模式、传输数据以及适应多样化应用场景的优势。 1.2决定测控电路精确度的关键要素影响测控电路精确度的核心要素包括:(1)噪声与干扰的存在;(2)失调现象与漂移效应,尤其是温度引起的漂移;(3)线性表现与保真度水平;(4)输入输出阻抗的特性影响。 在这些要素中,噪声干扰与失调漂移(含温度效应)是最为关键的因素,需要给予高度关注。 1.3测控电路的适应性表现测控电路在测控系统中展现出高度的适应性,具体表现在:* 具备选择特定信号、灵活实施各类转换以及进行信号处理与运算的能力* 实现模数转换与数模转换功能* 在直流与交流、电压与电流信号之间进行灵活转换* 在幅值、相位、频率与脉宽信号等不同参数间进行转换* 实现量程调整功能* 对信号实施多样化的处理与运算,如计算平均值、差值、峰值、绝对值,进行求导数、积分运算等,以及实现非线性环节的线性化处理、逻辑判断等操作1.4测量电路输入信号类型对电路结构设计的影响测量电路的输入信号类型对其电路结构设计产生显著影响。 依据传感器的类型差异,输入信号的形态也呈现多样性。 主要可分为...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值