Java JNI由浅入深(包括:Java和C++互传ArrayList泛型对象参数)

OpenClaw+飞书搭建私人AI助手:本地化、可执行、高安全的生产力系统 AI助手不再只是问答工具,而是能读消息、改文档、查日程、写表格的‘数字分身’。其核心在于本地化部署保障数据不出域,结合飞书API实现深度办公场景集成,通过权限最小化、白名单触发、操作预览等机制达成高安全性与强可控性。OpenClaw作为典型代表,以npx无感升级、流式响应、多线程会话等工程设计,支撑真实职场中的会议纪要自动化、待办提取、多维表格生成等高频任务,为技术小白、Agent初学者及进阶开发者提供从零到稳定运行的完整实践路径。 阅读详情

Java JNI由浅入深(包括:Java和C++互传ArrayList泛型对象参数)

 

         我们知道Java是一个运行在虚拟机里面的高级的编程语言,如果要调用系统的动态链接库的话,就要先声明native修饰的方法(类似接口里面的方法),再由C/C++程序来实现(类似实现接口里的方法)。这样Java调用这些native方法就相当于调用了C/C++里面实现了的方法。通常我们把这种机制叫做JNI(Java NativeInterfac),即Java 本地编程接口


          Android也同理,要学会在Android上进行NDK开发,首先我们到打好java JNI的基础。现在我们暂时把Android开发丢到一边先,试试在Java之下编译一个C动态链接库,再用Java程序调用。

 

1)先来个最简单的打印HelloWorld例子:

Java代码(HelloJni.java):

  1. import java.util.*;  
  2. public class HelloJni{  
  3.       
  4.     static{  
  5.         System.loadLibrary("hello");  
  6.     }  
  7.     public native static void sayHello();  
  8.     public static void main(String [] args)  
  9.     {  
  10.                 HelloJni.sayHello();  
  11.     }  
  12. }  
 

生成头文件(HelloJni.h):

先javac HelloJni.java编译你的Java源码,再javah–jni HelloJni生成所需的头文件

头文件内容是这样的:

  1. /* DO NOT EDIT THIS FILE - it is machine generated */  
  2. #include <jni.h>  
  3. /* Header for class HelloJni */  
  4. #ifndef _Included_HelloJni  
  5. #define _Included_HelloJni  
  6. #ifdef __cplusplus  
  7. extern "C" {  
  8. #endif  
  9. JNIEXPORT void JNICALL Java_HelloJni_sayHello (JNIEnv *, jclass);  
  10. #ifdef __cplusplus  
  11. }  
  12. #endif  
  13. #endif  
 


实现头文件声明的方法(HelloJni.cpp)


[c-sharp] view plain copy
  1. #include "HelloJni.h"  
  2. JNIEXPORT void JNICALL Java_HelloJni_sayHello(JNIEnv *env, jclass cls)  
  3. {  
  4.        printf("HelloWorld");  
  5. }  
 

 

编译命令: g++ -I$JAVA_HOME/include-I$JAVA_HOME/include/linux HelloJni.cpp -shared -o libhello.so

命令参数解析:-I 是指引入java虚拟机的库的路径,-shared 是指编译成动态链接库(共享库) –o 输出文件名(注意,在Linux平台下的动态链接库有一个命名格式:“lib+库名+.so”在java代码里面loadLibrary的时候不要加lib前缀和.so后缀)

由于我这里把这个动态链接库编译放在当前目录下,所以还要设置环境变量LD_LIBRARY_PATH=该so动态链接库所在的目录,才能正常运行

 

#############################+++华丽的分割线+++###########################


2)好了,可以打印HelloWorld出来后,我们再深入一点点,传入一个int的数,在C/C++代码里面加1后返回。

 

Java代码(HelloJni.java):

  1. public class HelloJni{  
  2.         static{  
  3.                    System.loadLibrary("hello");  
  4.         }  
  5.         public static native void sayHello();  
  6.         public native int getInt();  
  7.         public native void setInt(int i);  
  8.         public static void main(String args[]){  
  9.         //      HelloJni.sayHello();  
  10.                  HelloJni hello = new HelloJni();  
  11.                  hello.setInt(2);  
  12.                  System.out.println(hello.getInt());  
  13.         }  
  14. }  
 

生成头文件(HelloJni.h):

[c-sharp] view plain copy
  1. /* DO NOT EDIT THIS FILE - it is machine generated */  
  2. #include <jni.h>  
  3. /* Header for class HelloJni */  
  4. #ifndef _Included_HelloJni  
  5. #define _Included_HelloJni  
  6. #ifdef __cplusplus  
  7. extern "C" {  
  8. #endif  
  9. JNIEXPORT void JNICALL Java_HelloJni_sayHello (JNIEnv *, jclass);  
  10. JNIEXPORT jint JNICALL Java_HelloJni_getInt (JNIEnv *, jobject);  
  11. JNIEXPORT void JNICALL Java_HelloJni_setInt (JNIEnv *, jobject, jint);  
  12. #ifdef __cplusplus  
  13. }  
  14. #endif  
  15. #endif  
 

实现头文件声明的方法(HelloJni.cpp)

  1. #include "HelloJni.h"  
  2. int i=1;  
  3. JNIEXPORT void JNICALL Java_HelloJni_sayHello  
  4.   (JNIEnv *env, jclass cls){  
  5.         printf("HelloWorld/n");  
  6. }  
  7. JNIEXPORT jint JNICALL Java_HelloJni_getInt  
  8.   (JNIEnv *env, jobject thiz){  
  9.         return i;  
  10. }  
  11. JNIEXPORT void JNICALL Java_HelloJni_setInt  
  12.   (JNIEnv *env, jobject thiz,jint ji){  
  13.         i = ji+1;  
  14. }  
 

运行结果:打印2


3)只是传入简单的数据类型不爽,这次让C/C++生成个Java对象返回

 

Java代码:pojo实体类(User.java)

[c-sharp] view plain copy
  1. public class User{  
  2.         private long id;  
  3.         private String userName;  
  4.         private boolean isMan;  
  5.         private int age;  
  6.         public User(){}  
  7.         public User(long id, String userName, boolean isMan, int age) {  
  8.                 super();  
  9.                 this.id = id;  
  10.                 this.userName = userName;  
  11.                 this.isMan = isMan;  
  12.                 this.age = age;  
  13.         }  
  14.         public long getId() {  
  15.                 return id;  
  16.         }  
  17.         public void setId(long id) {  
  18.                 this.id = id;  
  19.         }  
  20.         public String getUserName() {  
  21.                 return userName;  
  22.         }  
  23.         public void setUserName(String userName) {  
  24.                 this.userName = userName;  
  25.         }  
  26.         public boolean isMan() {  
  27.                 return isMan;  
  28.         }  
  29.         public void setMan(boolean isMan) {  
  30.                 this.isMan = isMan;  
  31.         }  
  32.         public int getAge() {  
  33.                 return age;  
  34.         }  
  35.         public void setAge(int age) {  
  36.                 this.age = age;  
  37.         }  
  38. }  
 

Java代码(HelloJni.java):

  1. public class HelloJni{  
  2.         static{  
  3.                 System.loadLibrary("userbean");  
  4.         }  
  5.         public static native void sayHello();  
  6.         public native int getInt();  
  7.         public native void setInt(int i);  
  8.         public native void setUser(String userName);  
  9.         public native User getUser();  
  10.         public static void main(String args[]){  
  11.         //      HelloJni.sayHello();  
  12.                 HelloJni hello = new HelloJni();  
  13.         //      hello.setInt(2);  
  14.         //      System.out.println(hello.getInt());  
  15.                 hello.setUser("LiangYaotian");  
  16.                 User user = hello.getUser();  
  17.                 System.out.println("user from c/c++");  
  18.                 System.out.println("name:"+user.getUserName());  
  19.                 System.out.println("isMan?:"+user.isMan());  
  20.                 System.out.println("age:"+user.getAge());  
  21.         }  
  22. }  
 

生成头文件(HelloJni.h):

[c-sharp] view plain copy
  1. #include <jni.h>  
  2. /* Header for class HelloJni */  
  3. #ifndef _Included_HelloJni  
  4. #define _Included_HelloJni  
  5. #ifdef __cplusplus  
  6. extern "C" {  
  7. #endif  
  8. JNIEXPORT void JNICALL Java_HelloJni_sayHello (JNIEnv *, jclass);  
  9. JNIEXPORT jint JNICALL Java_HelloJni_getInt (JNIEnv *, jobject);  
  10. JNIEXPORT void JNICALL Java_HelloJni_setInt (JNIEnv *, jobject, jint);  
  11. JNIEXPORT void JNICALL Java_HelloJni_setUser (JNIEnv *, jobject, jstring);  
  12. JNIEXPORT jobject JNICALL Java_HelloJni_getUser  (JNIEnv *, jobject);  
  13. #ifdef __cplusplus  
  14. }  
  15. #endif  
  16. #endif  
 

实现头文件声明的方法(HelloJni.cpp)

[c-sharp] view plain copy
  1. #include <iostream>  
  2. #include <stdio.h>  
  3. using namespace std;  
  4. int i=1;  
  5. jobject user;  
  6. JNIEXPORT void JNICALL Java_HelloJni_sayHello  
  7.   (JNIEnv *env, jclass cls){  
  8.         printf("HelloWorld/n");  
  9. }  
  10. JNIEXPORT jint JNICALL Java_HelloJni_getInt  
  11.   (JNIEnv *env, jobject thiz){  
  12.         return i;  
  13. }  
  14. JNIEXPORT void JNICALL Java_HelloJni_setInt  
  15.   (JNIEnv *env, jobject thiz,jint ji){  
  16.         i = ji+1;  
  17. }  
  18. JNIEXPORT void JNICALL Java_HelloJni_setUser  
  19.   (JNIEnv *env, jobject thiz, jstring name){  
  20.         jclass userClass = env->FindClass("User");  
  21.         jmethodID userMethod = env->GetMethodID(userClass,"<init>","()V");  
  22.         jfieldID mId = env->GetFieldID(userClass,"id","J");  
  23.         jfieldID mUserName = env->GetFieldID(userClass,"userName","Ljava/lang/String;");  
  24.         jfieldID mIsMan = env->GetFieldID(userClass,"isMan","Z");  
  25.         jfieldID mAge = env->GetFieldID(userClass,"age","I");  
  26.         jobject userObject = env->NewObject(userClass,userMethod);  
  27.         env->SetObjectField(userObject,mUserName,name);  
  28.         env->SetLongField(userObject,mId,1001);  
  29.         env->SetBooleanField(userObject,mIsMan,1);  
  30.         env->SetIntField(userObject,mAge,21);  
  31.         user = userObject;  
  32. }  
 

 

 

4)有些同学可能会说:“返回个Java对象算什么啊,C/C++和Java之间互传复杂对象才好玩呢!”正所谓“不怕做不到,就怕想不到”,我们接着重构一下上面那个例子!


这次我们传包含有User对象的List到C/C++程序里面


Java代码(User.java)

同上。

Java代码(HelloJni.java)

  1. import java.util.*;  
  2. public class HelloJni{  
  3.         static{  
  4.                 System.loadLibrary("userbean");  
  5.         }  
  6.         public native int get();  
  7.         public native void set(int i);  
  8.         public native void setUser(String userName);  
  9.         public native User getUser();  
  10.         public native void setUserList(ArrayList<User> userList);  
  11.         public native ArrayList<User> getUserList();  
  12.         public static void main(String [] args)  
  13.         {  
  14.                 HelloJni hello = new HelloJni();  
  15.         //      hello.set(2);  
  16.         //      System.out.println(hello.get());  
  17.         /* 
  18.                 hello.setUser("LiangYaotian"); 
  19.                 User user = hello.getUser(); 
  20.                 System.out.println("user from c/c++"); 
  21.                 System.out.println("name:"+user.getUserName()); 
  22.                 System.out.println("isMan?:"+user.isMan()); 
  23.                 System.out.println("age:"+user.getAge()); 
  24.         */  
  25.                 ArrayList<User> userList = new ArrayList<User>();  
  26.                 for(int i=0;i<10;i++){  
  27.                         User u = new User((long)(1000+i),"LiangYaotian"+i,true,21);  
  28.                         userList.add(u);  
  29.                 }  
  30.                 hello.setUserList(userList);  
  31.                 userList = null;  
  32.                 userList = hello.getUserList();  
  33.                 System.out.println("ArrayList<User> construct from C++,then Java print it.....");  
  34.                 for(User u : userList){  
  35.                         System.out.println("id:"+u.getId()+"; name:"+u.getUserName());  
  36.                 }  
  37.         }  
  38. }  
 

C头文件(HelloJni.h)

  1. #include <jni.h>  
  2. /* Header for class HelloJni */  
  3. #ifndef _Included_HelloJni  
  4. #define _Included_HelloJni  
  5. #ifdef __cplusplus  
  6. extern "C" {  
  7. #endif  
  8. JNIEXPORT void JNICALL Java_HelloJni_sayHello (JNIEnv *, jclass);  
  9. JNIEXPORT jint JNICALL Java_HelloJni_getInt (JNIEnv *, jobject);  
  10. JNIEXPORT void JNICALL Java_HelloJni_setInt (JNIEnv *, jobject, jint);  
  11. JNIEXPORT void JNICALL Java_HelloJni_setUser (JNIEnv *, jobject, jstring);  
  12. JNIEXPORT jobject JNICALL Java_HelloJni_getUser  (JNIEnv *, jobject);  
 

头文件的实现(HelloJni.cpp)

  1. #include "HelloJni.h"  
  2. int i=1;  
  3. jobject user;  
  4. JNIEXPORT jint JNICALL Java_HelloJni_get  
  5.   (JNIEnv *env, jobject jthiz){  
  6.         printf("HelloWorld/n");  
  7. }  
  8. JNIEXPORT void JNICALL Java_HelloJni_set  
  9.   (JNIEnv *env, jobject jthiz, jint ji){  
  10.         i = ji+1;  
  11. }  
  12. JNIEXPORT void JNICALL Java_HelloJni_setUser  
  13.   (JNIEnv *env, jobject jthiz, jstring name){  
  14.         jclass userClass = env->FindClass("User");  
  15.         jmethodID userMethod = env->GetMethodID(userClass,"<init>","()V");  
  16.         jfieldID mId = env->GetFieldID(userClass,"id","J");  
  17.         jfieldID mUserName = env->GetFieldID(userClass,"userName","Ljava/lang/String;");  
  18.         jfieldID mIsMan = env->GetFieldID(userClass,"isMan","Z");  
  19.         jfieldID mAge = env->GetFieldID(userClass,"age","I");  
  20.         jobject userObject = env->NewObject(userClass,userMethod);  
  21.         env->SetObjectField(userObject,mUserName,name);  
  22.         env->SetLongField(userObject,mId,1001);  
  23.         env->SetBooleanField(userObject,mIsMan,1);  
  24.         env->SetIntField(userObject,mAge,21);  
  25.         user = userObject;  
  26. }  
  27. JNIEXPORT jobject JNICALL Java_HelloJni_getUser  
  28.   (JNIEnv *env, jobject jthiz){  
  29.         return user;  
  30. }  
  31. JNIEXPORT void JNICALL Java_HelloJni_setUserList  
  32.   (JNIEnv *env, jobject jthiz, jobject userList){  
  33.         int i;  
  34.         //class ArrayList  
  35.         jclass cls_arraylist = env->GetObjectClass(userList);  
  36.         //method in class ArrayList  
  37.         jmethodID arraylist_get = env->GetMethodID(cls_arraylist,"get","(I)Ljava/lang/Object;");  
  38.         jmethodID arraylist_size = env->GetMethodID(cls_arraylist,"size","()I");  
  39.         jint len = env->CallIntMethod(userList,arraylist_size);  
  40.         printf("get java ArrayList<User> object by C++ , then print it...../n");  
  41.         for(i=0;i<len;i++){  
  42.                 jobject obj_user = env->CallObjectMethod(userList,arraylist_get,i);  
  43.                 jclass cls_user = env->GetObjectClass(obj_user);  
  44.                 jmethodID user_getId = env->GetMethodID(cls_user,"getId","()J");  
  45.                 jmethodID user_getUserName = env->GetMethodID(cls_user,"getUserName","()Ljava/lang/String;");  
  46.                 jmethodID user_isMan = env->GetMethodID(cls_user,"isMan","()Z");  
  47.                 jmethodID user_getAge = env->GetMethodID(cls_user,"getAge","()I");  
  48.                 jstring name = (jstring)env->CallObjectMethod(obj_user,user_getUserName);  
  49.                 jboolean b = true;  
  50.                 const char *namePtr = env->GetStringUTFChars(name,&b);  
  51.                 jlong id = env->CallLongMethod(obj_user,user_getId);  
  52.                 jboolean sex = env->CallBooleanMethod(obj_user,user_isMan);  
  53.                 jint age = env->CallIntMethod(obj_user,user_getAge);  
  54.                 printf("Id:%d; ",id);  
  55.                 printf("Name:%s; ",namePtr);  
  56.                 printf("isMan? %d; ",sex);  
  57.                 printf("Age:%d /n ",age);  
  58.         }  
  59. }  
  60. JNIEXPORT jobject JNICALL Java_HelloJni_getUserList  
  61.   (JNIEnv *env, jobject jthiz){  
  62.         //ArrayList Object  
  63.         jclass cls_ArrayList = env->FindClass("java/util/ArrayList");  
  64.         jmethodID construct = env->GetMethodID(cls_ArrayList,"<init>","()V");  
  65.         jobject obj_ArrayList = env->NewObject(cls_ArrayList,construct,"");  
  66.         jmethodID arrayList_add = env->GetMethodID(cls_ArrayList,"add","(Ljava/lang/Object;)Z");  
  67.         //User Object  
  68.         jclass cls_user = env->FindClass("User");  
  69.         //none argument construct function  
  70.         jmethodID construct_user = env->GetMethodID(cls_user,"<init>","()V");  
  71.         //new a object  
  72.         jobject obj_user = env->NewObject(cls_user,construct_user,"");  
  73.         //get method id  
  74.         /* 
  75.         jmethodID user_setId = env->GetMethodID(cls_user,"setId","(J)V"); 
  76.         jmethodID user_setUserName = env->GetMethodID(cls_user,"setUserName","(Ljava/lang/String;)V"); 
  77.         jmethodID user_setMan = env->GetMethodID(cls_user,"setMan","(Z)V"); 
  78.         jmethodID user_setAge = env->GetMethodID(cls_user,"setAge","(I)V"); 
  79.         */  
  80.         int i;  
  81.         for(i=0;i<10;i++){  
  82.         //new a object  
  83.         jobject obj_user = env->NewObject(cls_user,construct_user,"");  
  84.         //get field id  
  85.         jfieldID user_id = env->GetFieldID(cls_user,"id","J");  
  86.         jfieldID user_name = env->GetFieldID(cls_user,"userName","Ljava/lang/String;");  
  87.         jfieldID user_isMan = env->GetFieldID(cls_user,"isMan","Z");  
  88.         jfieldID user_age = env->GetFieldID(cls_user,"age","I");  
  89.         env->SetLongField(obj_user,user_id,i);  
  90.         env->SetObjectField(obj_user,user_name,env->NewStringUTF("LiangYaoTian"));  
  91.         env->SetBooleanField(obj_user,user_isMan,1);  
  92.         env->SetIntField(obj_user,user_age,21);  
  93.                 env->CallObjectMethod(obj_ArrayList,arrayList_add,obj_user);  
  94.         }  
  95.         return obj_ArrayList;  
  96. }  
 

运行结果:

theEnd.jpg

 

 

源码:E-Mail我:u_xtian@qq.com

原创作品,转载需注明出处...http://blog.youkuaiyun.com/u_xtian/archive/2010/11/25/6033963.aspx


C++通过JNI调用JAVA方法返回ArrayList对象 获取系统已安装应用列表并返回List对象。在JAVA中调用JNI原生方法。 阅读详情

相关推荐

软文自助交易平台源码:PHP三端闭环SaaS系统解析

软文平台源码本质上是面向营销服务场景的轻量级SaaS系统,其核心在于构建甲方、作者与平台方之间的自助交易闭环。基于PHP+MySQL的技术选型并非技术妥协,而是兼顾低运维成本、IDC虚拟主机兼容性与微信生态深度集成的务实决策。系统通过RBAC权限模型、订单状态机、资金分账机制(余额/冻结余额分离)和三端(PC后台/H5移动端/微信服务号)数据同步,实现业务流、资金流与内容流的可控协同。适用于中小营销公司快速搭建自有接单平台,也适合作为PHP全栈工程师理解真实Web系统架构与二次开发实践的典型样本。

weixin_27943395的博客 181

转 java c++互传arraylist

Java JNI由浅入深(包括:Java和C++互传ArrayList泛型对象参数) 2010-11-25 09:571694人阅读评论(1)收藏举报 我们知道Java是一个运行在虚拟机里面的高级的编程语言,如果要调用系统的动态链接库的话,就要先声明native修饰的方法(类似接口里面的方法),再由C/C++程序来实现(类似实现接口里的方法)。这样...

weixin_30652897的博客 619

信呼OA v2.6.2私有化部署与流程引擎实战指南

协同办公系统是企业数字化转型的基础支撑,其核心在于流程自动化、数据自主可控与低代码可配置能力。信呼协同办公OA系统作为国产轻量级私有化OA代表,基于PHP+MySQL架构,提供模块化解耦的流程引擎、本地化文档协作及移动端集成能力。它不依赖公有云,支持Docker一键部署,适配中小团队真实审批场景,如条件跳转审批流、用印闭环管理、企业微信扫码签到等。技术价值体现在配置即生效、数据不出内网、扩展接口开放(如SQL钩子),广泛应用于高校行政、科研项目组与区域销售团队等对安全性和灵活性要求较高的组织。本文聚焦信呼v

weixin_30516429的博客 107

jni传递对象中包含arraylist对象。

相信在使用jni的过程中,总是要传递各种各样的类型,在这其中,我也碰到了一些问题。 简单的传一些内容,相信在网上一搜一大把。 所以我们就来说说。传递对象中包含arraylist吧。 在这里先给大家一个连接,显示一些jni的传递:http://blog.youkuaiyun.com/u_xtian/article/details/6033963 所以,我们定义一些Java中的类 user.java

zs10hz的专栏 6217

JNI开发Java和C/C++互相传递List集合

JNI开发Java和C/C++互相传递List集合, 可以参考: Java从C/C++获取List集合对象:https://blog.youkuaiyun.com/niuba123456/article/details/80994166 Java传递List集合对象到C/C++ https://blog.youkuaiyun.com/niuba123456/article/details/80994168

jni操作arraylist对象

在jni中操作arraylist对象,然后添加一个int型数据进去

OpenClaw智能体平台腾讯云ADP一键部署实战指南

AI智能体(Agent)是具备感知-决策-执行闭环能力的业务自动化实体,其工程化落地依赖标准化工具调用、状态持久化、工作流编排与云原生基础设施深度协同。OpenClaw作为面向生产的智能体全生命周期管理平台,通过Skill、Memory、Tool、Workflow四大抽象构件,将复杂AI逻辑转化为可声明、可灰度、可运维的云原生应用。其核心价值在于 bridging the gap 从本地Demo到高可用生产环境——尤其依托腾讯云ADP(Application Deployment Platform)实现Ku

weixin_33836874的博客 247

国央企创新负责人如何通过平台实现科研成果的快速识别与转化?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

JNI调用java层ArrayList方法

在类中存在的就是方法和属性了,上次写了jni调用java的普通方法,这次记录下调用其属性的操作。 比如说我在native层处理相机传进来的图像数据,通过人脸识别算法返回人脸的坐标位置ArrayList<Rect>。 一、首先在java层先定义一个native方法: public native ArrayList<Rect> faceDetectSaveInfoFromJNI(Bitmap bitmap); 二、在naive层完成该方法的实现: extern "C" JNIEXPORT

xubinghui1的博客 2557

别再到处找模板了!我用这套软著申请材料(含用户手册+源代码模板)两个月搞定

本文提供了一套高效的软著申请材料模板,包括用户手册和源代码模板,帮助开发者两个月内快速完成申请。通过实战指南和常见误区解析,详细介绍了材料准备的规范与技巧,确保格式合规性,大幅提升审核通过率。

weixin_29268637的博客 548

基于yolo11的BGA图像目标检测

15.YOLOv8的n/s版本(如YOLOv8n-1280),或通过TensorRT量化压缩模型。3.使用自适应batch_size(如根据GPU显存动态调整),推荐16-32。为采集分辨率整数倍(如原图2592×1944,训练时缩放为640×480),保持宽高比。14.采用余弦退火学习率(cos_lr)和早停(patience=50),防止过拟合。1.模型标注后,少量标注全部人工校验,大量数据抽检,部分人工检验。13.部署模型后持续收集困难样本(如模棱两可的预测结果),定期迭代更新模型。

qq_47798402的博客 1205

JNI基础语法

我们知道Java代码的内存是由垃圾回收器来管理,而JNI代码则不受Java的垃圾回收器来管理,所以JNI代码提供了一组函数,来管理通过JNI代码生成的JNI对象,比如jobject,jclass,jstring,jarray等,对于这些对象,绝对不能简单的声明一个全局变量,在JNI接口函数里面给这个全局变量赋值这么简单,一定要使用JNI代码提供的管理JNI对象的函数,否则代码可能会出现预想不到的问题。我们推荐的方法是,当JNI函数调用的Java方法出现异常的时候,JNI函数应该合理的停止执行代码。

weixin_42046829的博客 3430

TwinCAT3与Matlab Simulink集成开发:如何快速生成和调试TcCOM模块

本文详细介绍了如何将TwinCAT3与Matlab Simulink进行深度集成,实现从控制算法模型到实时TcCOM模块的高效开发。通过环境搭建、模型配置、代码生成、系统集成与调试的完整流程,工程师可以快速将Simulink算法部署到倍福实时控制平台,大幅缩短开发周期并提升可靠性。

ik67890123的博客 224

JNI Java与C的相互调用与基本操作

Java和Jni的类型对照表 引用类型对照表 一.Java调用C函数 1.字符串拼接 public native String concatString(String a, String b); 复制代码/** * 字符串拼接 */ extern "C" JNIEXPORT jstring JNICALL Java_com_xfhy_ndkdemo_MainActivity_concatS...

weixin_34015860的博客 517

Unity 接入 Steam 平台

Unity 接入 steam sdk 的登录和应用内购买功能

MarinaTsang的博客 3903

PVE(Proxmox VE)添加VMware Esxi并迁移虚拟机

跨平台迁移虚拟机:从VMware虚拟化平台迁移虚拟机到PVE平台。

VEGETA的博客 7714

NDK学习笔记(2)——C与java之间的互相调用

Java调用C在上一篇博文中,我们完成了一个NDK项目的基本配置以及各个文件的功能,现在来写一下其他功能,demo下载在文章末尾。字符串的传递老样子,在MainActivity写一个native方法:public native String stringTransfer(String s);然后鼠标放在方法上按住alt+enter,自动添加了C的相关函数,然后我们改改://需要加这句,表明以下代码是

kevinjqy的专栏 787

勇闯dify v1.0.0之设置模型供应商。解决:Reached maximum retries (3) for URL https://marketplace.dify.ai/

朋友们,大家好,今天带大家来勇闯dify v1.0.0。为什么叫勇闯呢?我就这么说吧,本来我昨天就想带大家勇闯v1.0.0的。但是dify的marketplace访问不了。公司的网和手机热点都试了,就是访问不了。我们连个模型都没有,还勇闯个球啊,对吧,就搁置了。今天,我赶紧看看这个marketplace好了没。一看,可以了。赶紧写下这篇博客,帮助同志们走出困境。

xiezhipu的博客 4616

JNI开发C调用Java的方法和构造函数(三)

C调用Java的方法和构造函数

believeinbelieve的博客 1828

【图像超分】论文精读:RepSR: Training Efficient VGG-style Super-Resolution Networks with Structural Re-Paramete

摘要: 本文提出RepSR,一种基于结构重新参数化和批量归一化(BN)的高效VGG式超分辨率网络。针对SR任务中BN易引发伪影的问题,作者通过分析发现训练-测试阶段的不一致性是主因,并提出先使用小批量统计训练、后期切换为总体统计的优化策略。RepSR块设计包含干净的残差路径和带改进BN的扩展-压缩卷积路径,有效平衡了训练非线性与推理效率。实验表明,RepSR在不同模型规模下优于现有重参数化方法,且实际推理速度更快。该工作为SR提供了性能与效率兼优的解决方案,相关代码未开源。 关键词: 超分辨率、结构重参数化

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 304

《S32系列芯片——Boot & HSE详解》持续更新中...

专栏总目录,将详细介绍S32系列芯片的Boot功能,最终给出HSE基于IVT的Secure Boot方案!!!

车载系统攻城狮 4385

C++ ,JNI, Java 数据传递全解(一)

C++,JNI,Java三方数据通信

u011228868的专栏 1369

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

jni java->c++传递对象, c++->java传递list

java->c++传递对象 java 定义封装类 package com.example; public class TestInfo { public boolean bool; public char ch; public double dou; public int in; public byte[] array; public String str; public TestInfo (boolean bool, char ch, double do

amin_hui的博客 373

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

JNI开发中native层与Java层的交互

在native层中对Java层进行交互的一切操作都离不开JNIEnv这个指针,里面包含了一系列对Java层的方法。 native层操作Java复杂对象 native方法声明 public static void sendArrayList(ArrayList list); cpp代码实现 这里写代码片

装睡的哈士奇的博客 2077

Android NDK 实战

Android NDK 技术实践 本篇主要讲解ndk相关的内容,主要对开发实际用到的例子分析和相关技术点的总结,NDK开发环境的配置忽略了 定义:NDK是一套工具,通过这个技术可以将C/C++一些优秀的库或者函数在Android应用程序中使用。 NDK主要组件: 动态库:c/c++源文件构建或者第三方的.so文件。 静态库:c/c++源文件可以构建成.a文件,可以将静态库关联到其他的库中使用。 java原生接口:JNI是Java和C++组件用于相互通信的接口 应用的而二进制接口(ABI):ABI 对应不同

风的轨迹 2109
上一篇: JNI全攻略之三--JNI头文件分析
下一篇: 整理下 Intent 中文API
wx1qq1com
博客等级 码龄18年 123粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值