当前位置: 首页 > news >正文

昆山教育云平台网站建设wordpress做seo好做

昆山教育云平台网站建设,wordpress做seo好做,哈尔滨快速建站合作,高阳网站制作基于JNI实现调用C SDK 背景分析解决实践 背景 上篇文章总结了几种Java项目调用C/C SDK项目方法#xff0c;在逐一实践、踩坑后#xff0c;最终还是敲定采用 JNI 方式进行实现。在文章开始的过程#xff0c;会先大概讲讲笔者遇到的情况#xff0c;因为封装方式需要根据实际… 基于JNI实现调用C SDK 背景分析解决实践 背景 上篇文章总结了几种Java项目调用C/C SDK项目方法在逐一实践、踩坑后最终还是敲定采用 JNI 方式进行实现。在文章开始的过程会先大概讲讲笔者遇到的情况因为封装方式需要根据实际项目而定可能不太适合于任何人。 分析 如图这里列举了一个C项目的头部文件我们可以看到第一个方法它返回的是一个GopHandle对象而这个对象里有什么属性呢笔者也不得而知它的具体定义在一个被打包好的动态库里面而且这里模板函数方式的格式也让笔者无从下手。 这里总结了笔者遇到过的一些问题及解决方式 C模板函数请求的映射目前通过各种渠道资源的搜索chatgpt、google等社区及外部求助暂时还未找出好的解决方式。 关于std::string data_root 类型映射 这个在用JNA实践过程中在C实际操作字符串时如简单的读取值会出现 invalid memory access 问题。猜测 data_root 这种方式的传递JNA传入的时string的地址而C 对于这个地址的访问属于跨内存访问去掉 C可正常访问 对象指针的映射虽然JNA提供了Pointer 指针类但在实践过程中这个 Pointer 对 基础类型int、short、byte的指针生效。对于对象类类型的指针需要我们在Java层面设计一个包含一摸一样的属性的 class 类去对应 C 的 结构体或者class 类。 以上图为例子我们需要设计一个Java版本的 GopHandle类去对应 C 的 GopHandle但GopHandle 封装的一个结构体或类其中信息不得而知。 解决 这里GitHub找了很Java调用C SDK项目作参考最终还是敲定 JNI 去实现对于上面遇到的一些问题也想出了解决思路 如果C 方法返回的指针可以将其放到中间层统一转为整形表示。指针通常被表示为一个64位整数可以用来存储内存地址。通过将指针转换为整数类型可以在需要时保存或传递指针的值而不需要直接操作指针。这点来自GPT理性看待传参时对于指针传参统一放到中间层用C去实现Java还是采用对应的数据类型传输。关于模板函数的传参同样统一放到中间层用C去实现调用。 思路理清了接下来就是撸代码了以下是一些可能写得不太好C代码现学现卖但是能用。手动狗头 实践 Java项目里根据头部文件定义本地方法SentScore.java 生成头部文件 javac -h . SentScore.java用C 实现头部文件接口在这里才去真正调用C接口注意 在这里对于内存的操作不属于JVM的管理范畴需要调用ReleaseStringUTFChars 手动释放内存才不会有内存泄漏的风险。如下是几个方法的例子 #include SentScore.h #include SentScore.h#include SentScoreSDK.h #include vector#undef __request #define __request EnglishSentPronsRequestJNIEXPORT jlong JNICALL Java_SentScore_HandleCreate(JNIEnv *env, jclass obj, jstring data, jint num_threads){GopJniHandle *jni new GopJniHandle(num_threads);if (jni){jboolean is_copy;// 实现Java里String - char *const char *data_root env-GetStringUTFChars(data, is_copy);// 调用SDKjni-handle GopHandleCreate__request(data_root, num_threads);if (is_copy){// 释放内存env-ReleaseStringUTFChars(data, data_root);}}// 指针转整形return reinterpret_castjlong(jni); }JNIEXPORT jint JNICALL Java_SentScore_HandleRelease(JNIEnv *env, jclass obj, jlong jni_gop_handle){// 整形转指针auto *jni reinterpret_castGopJniHandle*(jni_gop_handle);jint ans 0;if (jni){if (jni-handle){ans GopHandleRelease__request(jni-handle);jni-handle 0;}delete jni;}return ans; }JNIEXPORT jint JNICALL Java_SentScore_ThreadHandleStarts(JNIEnv *env, jclass obj, jlong jni_gop_thread_handle, jstring jni_ref, jstring jni_utt, jfloat gop_adjust){auto *thread reinterpret_castGopJniThreadHandle*(jni_gop_thread_handle);__request request;request.result.gop_adjust gop_adjust;if (thread thread-thread){// 把传入的字符串jni_ref 复制到到text_buffCopyString(env, thread-text_buff, jni_ref);request.ref_text thread-text_buff.data();CopyString(env, thread-text_buff, jni_utt);request.audio_id thread-text_buff.data();return GopThreadHandleStarts__request(thread-thread, request);}else{jboolean a1, b1;const char *a env-GetStringUTFChars(jni_ref, a1);const char *b env-GetStringUTFChars(jni_utt, b1);request.audio_id b;request.ref_text a;if (a1) env-ReleaseStringUTFChars(jni_ref, a);if (b1) env-ReleaseStringUTFChars(jni_utt, b);return GopThreadHandleStarts__request(NULL, request);} }最后一步将上面的C代码跟着SDK 一起打包成动态库.so然后.so文件放到库路径下在项目里引用调用。这里采用的框架是SpringBoot直接在启动类里加加载库路径。关于库路径可以打印如下代码进行获取或者在程序里指定库路径 System.getProperty(java.library.path)如果是Linux上一般默认会库路径会有 /usr/bin那么我们也可以通过创建软链接方式把库文件放入库路径里。
http://www.w-s-a.com/news/671698/

相关文章:

  • 杭州设计企业网站高端公司上虞做网站公司
  • 做网站能赚钱么用wordpress搭建知名网站
  • 阿里云服务器网站开发青岛做网站找哪家
  • 凡科做的网站为什么打不开织梦cms仿某作文网站整站源码(带采集)安装数据库
  • 免费h5模板网站模板汽车报价网址
  • 蔡甸网站建设烟台网站建设yt
  • 最流行的网站开发新开的网页游戏平台
  • 暴富建站wordpress 标签分类
  • 搞笑网站源码百度快照替代
  • 重庆网站建设哪家公司哪家好关键词是怎么排名的
  • 青县网站建设今天国际大事新闻
  • 深圳正规网站制作哪里好怎样优化网络
  • 米拓网站建设教程dw成品网站成品视频教学
  • 用jsp做的网站源代码天门网站网站建设
  • 百度如何把网站做链接地址有没有资源可以在线观看
  • 淮安做网站找哪家好电子商务网站建设规划书的内容
  • 开发网站建设用什么框架php黄页系统
  • 聊城制作网站全球十大电商平台排名
  • 用什么来网站开发好mega menu wordpress
  • 深圳制作网站有用吗wordpress的主题
  • 网站的规划与创建天津市南开区网站开发有限公司
  • 免备案网站主机建站哪个平台好
  • python做网站 不适合单页营销分享网站
  • 珠海市研发网站建设建设网站挣钱
  • 阿里巴巴国际站特点做wps的网站赚钱
  • wordpress更换域名后网站打不开宜昌建设银行网站
  • 写出网站开发的基本流程百度网页电脑版入口
  • 网站设计有限公司怎么样网站建设西班牙语
  • 网站安全解决方案宁波seo网络推广优化价格
  • 做网站带来好处wordpress可以做oa系统吗