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

外贸网站建站费用阳泉seo

外贸网站建站费用,阳泉seo,重庆江津做网站,企业网站做优化排名象客基于JNI 实现 嵌套 List 类型参数解析 背景分析解决 背景 在前面两篇文章中,我们总结了Java 调用 C/C SDK 的几种方案,分享了JNI在实践过程中的一些踩坑点,而在这篇文章将继续分享针对Java List类型及其嵌套类型,我们的JNI如何接…

基于JNI 实现 嵌套 List 类型参数解析

    • 背景
    • 分析
    • 解决

背景

在前面两篇文章中,我们总结了Java 调用 C/C++ SDK 的几种方案,分享了JNI在实践过程中的一些踩坑点,而在这篇文章将继续分享针对Java List类型及其嵌套类型,我们的JNI如何接收。

分析

如下,是我的的SDK的结构体定义:

struct CustomParam{std::string key;std::vector<std::string> values;
};

SDK的请求体入参定义如下:

struct Request
{std::string ref_text;std::vector<CustomParam> word_list; Request& operator=(const Request &other){ref_text = other.ref_text;word_list = other.word_list;return *this;}
};

解决

● 根据上面的SDK结构体的相关定义,我们在Java层可以有如下的 类型定义:

public class CustomParam {String key = "";List<String> values = new ArrayList<>();public String getKey() {return key;}public void setWord(String key) {this.key = key;}public List<String> getValues() {return values;}public void setValues(List<String> values) {this.values = values;}
}

● 关于native的方法申明如下:

public class CustomParamNative {public static native int starts(ArrayList<Object> customParam);}

● 根据native方法生成 头部文件

javac -encoding utf8 -h . XXX.java

● 如下为生成的native方法的头部文件

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_study_core_jni_CustomParamNative */#ifndef _Included_com_study_core_jni_CustomParamNative
#define _Included_com_study_core_jni_CustomParamNative
#ifdef __cplusplus
extern "C" {
#endif/** Class:     com_study_core_jni_CustomParamNative* Method:    starts* Signature: (JLjava/lang/String;Ljava/lang/String;F)I*/
JNIEXPORT jint JNICALL Java_com_study_core_jni_CustomParamNative_starts(JNIEnv *, jclass, jlong, jstring, jstring, jfloat);#ifdef __cplusplus
}
#endif
#endif

● 头部文件的具体实现

#include "com_study_core_jni_CustomParamNative.h"
#include <vector>
#undef __request
#define __request Request#include "stdio.h"
#include "stdlib.h"JNIEXPORT jint JNICALL Java_com_study_core_jni_CustomParamNative_starts(JNIEnv *env, jclass obj, jstring jni_ref, jobject customParamList)
{__request request;CopyString(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();if (customParamList != NULL){// 获取ArrayList类和对应的方法IDjclass arrayListClass = env->FindClass("java/util/ArrayList");jmethodID getMethodID = env->GetMethodID(arrayListClass, "get", "(I)Ljava/lang/Object;");jmethodID sizeMethodID = env->GetMethodID(arrayListClass, "size", "()I");// 获取CustomParam类和对应的字段IDjclass customParamClass = env->FindClass("com/seewo/study/core/bo/CustomParam");jfieldID wordFieldID = env->GetFieldID(customParamClass, "key", "Ljava/lang/String;");jfieldID valuesFieldID = env->GetFieldID(customParamClass, "values", "Ljava/util/List;");// 获取ArrayList的大小jint size = env->CallIntMethod(customParamList, sizeMethodID);printf("size = %d\n", size);// 遍历ArrayList并解析CustomParam对象for (int i = 0; i < size; i++){// 获取CustomParam对象jobject customParamObj = env->CallObjectMethod(customParamList, getMethodID, i);// 获取key字段的值jstring wordString = (jstring)env->GetObjectField(customParamObj, wordFieldID);printf("字符 = %c\n", wordString);jboolean is_copy;const char *word = env->GetStringUTFChars(wordString, &is_copy);printf("字符 = %c\n", word);// 将word和values赋值给C++结构体// 创建CustomParam结构体对象CustomParam customParam;// 将word字段的值赋值给C++结构体customParam.word = word;// 获取values字段的值jobject valuesList = env->GetObjectField(customParamObj, valuesFieldID);jclass listClass = env->FindClass("java/util/List");jmethodID toArrayMethodID = env->GetMethodID(listClass, "toArray", "()[Ljava/lang/Object;");jobjectArray valuesArray = (jobjectArray)env->CallObjectMethod(valuesList, toArrayMethodID);jsize size = env->GetArrayLength(valuesArray);std::vector<std::string> values;for (int j = 0; j < size; j++){jstring valuesString = (jstring)env->GetObjectArrayElement(valuesArray, j);const char *pron = env->GetStringUTFChars(valuesString, &is_copy);values.push_back(pron);env->ReleaseStringUTFChars(valuesString, pron);env->DeleteLocalRef(valuesString);}customParam.values = values;request.word_list.push_back(customParam);// 释放资源env->DeleteLocalRef(customParamObj);env->ReleaseStringUTFChars(wordString, word);env->DeleteLocalRef(wordString);env->DeleteLocalRef(valuesList);env->DeleteLocalRef(valuesArray);}// 释放资源env->DeleteLocalRef(arrayListClass);env->DeleteLocalRef(customParamClass);return ThreadHandleStarts<__request>(request);}}
http://www.tj-hxxt.cn/news/92891.html

相关文章:

  • 襄阳做网站 优帮云30条新闻摘抄
  • 怎样建设影视网站枸橼酸西地那非片的功效与作用
  • 那个网站做的刀比较好深圳网站关键词优化推广
  • wap网站建设公司搜索引擎优化的五个方面
  • 静态网站 插件怎么发帖子做推广
  • 实例讲解html5制作一个网站百度推广代理公司
  • 北京景观设计公司10强西安网站seo技术厂家
  • 自己做的网站维护一年多少钱注册公司流程和费用
  • 河源市建设规划局网站中央新闻直播今天
  • 可以免费做推广的网站今晚赛事比分预测
  • 大连专业手机自适应网站制作新型网络营销方式
  • 天津网站制作报价论坛营销
  • 专业北京网站建设优化推广关键词
  • 网站域名和备案公司可以不一样么站长工具seo诊断
  • 电子产品首页网站版模关键词排名批量查询软件
  • 新乡做网站的公司有那些怎样进行seo
  • ds216j做网站沈阳seo排名优化教程
  • 三合一网站开发教程湖北seo服务
  • 网站域名的所有权seo优化关键词排名
  • 网站栏目一般有哪些做网络销售感觉自己是骗子
  • 南安网站开发怎么seo网站排名
  • 网站做链接算侵权吗网站优化seo是什么意思
  • 目前国内做情趣最好的网站微博推广效果怎么样
  • 高端网站设计企业制作网站的网址
  • 昆明乐网网站建设培训推广 seo
  • 单位做网站注意什么问题软件优化
  • 经营网站 备案免费有效的推广网站
  • 网站创意文案怎么做小红书代运营
  • 栖霞酒店网站设计价格关键词优化公司前十排名
  • 空间一个数据库可以做几个网站游戏挂机赚钱一小时20