Android+JNI调用–文件操作(附源码)(2)

2.       实现本地方法调用接口
为了方便我们可以使用javah命令先生成对应C/C++语言中的.h然后再实现这些函数。FileSys.java编译成FileSys.class文件后,使用命令(当前目录为工程bin目录下)javah -jni com.luoxudong.jni.reader.FileSys,此时会在bin目录下生成一个.h文件,文件名格式如下:com_luoxudong_jni_reader_FileSys.h,为了方便本人把文件名改成JNI_FileSys.h。

JNI_FileSys.h代码:
/* DO NOT EDIT THISFILE - it is machine generated */
#include<jni.h>
/* Header for classcom_meijin_dict_reader_FileSys */

#ifndef_Included_com_meijin_dict_reader_FileSys
#define_Included_com_meijin_dict_reader_FileSys
#ifdef __cplusplus
extern"C" {
#endif
/*
* Class:    com_meijin_dict_reader_FileSys
* Method:   FileOpen
* Signature: (Ljava/lang/String;I)I
*/
JNIEXPORT jintJNICALL Java_com_meijin_dict_reader_FileSys_FileOpen
  (JNIEnv *, jclass, jstring, jint);

/*
* Class:    com_meijin_dict_reader_FileSys
* Method:   FileLength
* Signature: (I)I
*/
JNIEXPORT jintJNICALL Java_com_meijin_dict_reader_FileSys_FileLength
  (JNIEnv *, jclass, jint);

/*
* Class:    com_meijin_dict_reader_FileSys
* Method:   FileSeek
* Signature: (III)I
*/
JNIEXPORT jintJNICALL Java_com_meijin_dict_reader_FileSys_FileSeek
  (JNIEnv *, jclass, jint, jint, jint);

/*
* Class:    com_meijin_dict_reader_FileSys
* Method:   FileRead
* Signature:(II)Lcom/meijin/dict/bean/CusBuffer;
*/
JNIEXPORT jobjectJNICALL Java_com_meijin_dict_reader_FileSys_FileRead
  (JNIEnv *, jclass, jint, jint);

/*
* Class:    com_meijin_dict_reader_FileSys
* Method:   FileWrite
* Signature: (I[BI)I
*/
JNIEXPORT jintJNICALL Java_com_meijin_dict_reader_FileSys_FileWrite
  (JNIEnv *, jclass, jint, jbyteArray, jint);

/*
* Class:    com_meijin_dict_reader_FileSys
* Method:   FileClose
* Signature: (I)I
*/
JNIEXPORT jintJNICALL Java_com_meijin_dict_reader_FileSys_FileClose
  (JNIEnv *, jclass, jint);

#ifdef __cplusplus
}
#endif
#endif
其中JNIEXPORT和JNICALL两个宏是JNI的关键字,表示该函数需要被JNI调用,而jint,jstring,jbyteArray是以JNI为中介使JAVA中对应类型与本地类型对接的类型,jobject为需要返回的java对象,类型对应表如下:

Java类型

 

本地类型

 

字节(bit)

 

boolean

 

jboolean

 

8, unsigned

 

byte

 

jbyte

 

8

 

char

 

jchar

 

16, unsigned

 

short

 

jshort

 

16

 

int

 

jint

 

32

 

long

 

jlong

 

64

 

float

 

jfloat

 

32

 

double

 

jdouble

 

64

 

void

 

void

 

n/a

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwywgz.html