
JNI
cjzcjl
客户端啊……
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
JNI踩坑日记——突发脑残,用正负值判断地址是否正确
最近自己写的一个库,C返回一个内存地址后,Java通过long保存起来了,然后我很脑残地写了个if(地址 < 0)代表出错的代码(习惯思维害死人,因为想着地址都是正的,那么负的肯定有问题嘛)。然而java的long是有符号整数,导致地址一旦超过2^32次方就会报错,但实际上只是返回的8个字节的地址值最高位为1,是可用的地址来的。所以C返回给Java的内存地址,用long可以确定保存把8个字节的数据完整保存,但千万不能拿它进行正负判断,首先地址本身就没有负值,最高位符号位也是用于地址表达而非符号表达的,原创 2020-11-25 17:56:58 · 334 阅读 · 0 评论 -
JNI——将JAVA字符串数组转化为char**(C字符数组的(字符串)数组)的一个例子
/**将JAVA字符串数组转C char字符数组(俗称字符串)的数组**/char** stringArrToCharArr(JNIEnv * env, jclass jc, jobjectArray strArray ){ jstring jstr; jsize len = (*env)->GetArrayLength(env, strArray); char *...原创 2018-05-18 11:18:30 · 1795 阅读 · 1 评论 -
一种利用JNI实现的对象序列化存储库,使得JAVA序列化对象后可以存于内存区高速读写,并且不受JVM控制以避免OOM
本工程应用于一款安卓白板程序,因有读写速度需求,传统的序列化到磁盘的方式读写速度太慢,因此想到了利用C的特性写一个高速缓存,并继承实现了自己的inputStream和outputStream,用于暂存大规模多叉树和大体积对象。本工程的序列化对象的数据均使用一个整数作为标记进行区分,有需要的朋友可以修改本工程的实现以支持字符串标记。 本工程的JNI部分: 一、首先是M...原创 2018-06-27 19:49:29 · 686 阅读 · 0 评论 -
用NDK(JNI)获取触摸事件
由于安卓触摸事件的分发略显缓慢,尤其是在快速移动时点密度的降低可能会导致绘制曲线的点变得稀薄,从而增加曲线的走样程度。因此我用了JNI + Linux C + NDK做了一套直接从底层设备获取触摸设备坐标信息的库。 一、编写C文件和MakeFile:/**getevent2.c**/#include<stdio.h>#include<stdlib.h>#...原创 2018-08-17 18:02:46 · 3539 阅读 · 7 评论 -
使用JNI调用其他.so库因函数名对不齐引起undefind reference的问题
在实现FrameBuffer快速局部刷新库的过程,我把一部分函数打包成了一个动态链接so库方便以后其他需要使用FrameBuffer的程序使用。可是在调用的时候却发生了一些奇怪的事情:我在so库中编写了一个void drawPixel(int offset, int color)函数,并且成功编译成了so库libdraw_dazzle.so。然后我使用JNI makeFile文件引入该库:...原创 2018-09-14 16:11:57 · 946 阅读 · 2 评论 -
利用多叉树(字典树)实现简单的快速搜索
今晚在公众号上看到一条题: 看到题目第一时间想到树,而且是多叉树。为什么呢? 首先说说为何不选择顺序表,我们来试想想,如果500万个单词放在顺序表上,不加索引而且乱序,那么搜索一个关键词为开头的单词的时间按最差算要500万次比较,简直疯狂。但是如果先按首字母a~z排序一次,并记住每个首字母的第一个单词在表格第几个位置,效率又要好些,如果第二个字母再排序一些再做索引...原创 2018-10-30 20:41:03 · 6626 阅读 · 1 评论 -
一个JNI创建日期对象的例子,仅作参考
JNIEXPORT void JNICALL Java_com_cjz_mapscr_MapScreen_drawLines (JNIEnv *env, jobject thiz) { jclass clazz_date = (*env)->FindClass(env, "java/util/Date"); jmethodID mid_date = (*env)->GetMeth...原创 2018-11-20 16:06:26 · 366 阅读 · 0 评论