jSize

lua table与json的之间的互相转换高性能c++实现

烂漫一生 提交于 2020-08-14 16:32:02
请自行约束两种语言数据结构语法上的不同,避开如下问题: 1、json本身不约束key是否符合一个编程语言中的变量名,所以编写用于和编程语言数据结构交互的json代码时应该注意key是否正确。 2、lua没有数组,利用哈希表实现的逻辑上的数组,在中间可以存在不连续的情况时json将无法识别。 3、lua的字符串key可以和数字key共存,这对于json来说,是不允许的。 这些代码我已经用了很久了,所以暂时不多解释了,依赖c++11以上的版本, 代码挺多,有需求可以直接复制,这么多代码的目的也就是更高性能,单纯的在C++里面跑,比谷歌的实现稍微快一点点。 好了,废话不多说,上代码 #pragma once #include < string > #include <functional> #include <setjmp.h> #include <fstream> #include <vector> namespace aqx { #ifndef jsize_t typedef unsigned int jsize_t; #endif #ifndef jnumber_t typedef double jnumber_t; #endif static short constexpr jsvt_null{ 0 }; static short constexpr jsvt_string{ 1

JAVA Native Interface (JNI)

元气小坏坏 提交于 2020-04-29 04:30:41
1. Introduction At times, it is necessary to use native (non-Java) codes (e.g., C/C++) to overcome the memory management and performance constraints in Java. Java supports native codes via the Java Native Interface (JNI). JNI is difficult, as it involves two languages and runtimes. I shall assume that you are familiar with: Java. C/C++ and the GCC Compiler (Read " GCC and Make "). (For Windows) Cygwin or MinGW (Read " How to Setup Cygwin and MinGW "). 2. Getting Started 2.1 JNI with C Step 1: Write a Java Class HelloJNI.java that uses C Codes 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public class

Android JNI访问Java成员

旧城冷巷雨未停 提交于 2020-04-25 18:23:12
在 JNI 调用中,不仅仅 Java 可以调用本地方法,本地方法也可以调用 Java 中的方法和成员变量。 Java 中的类封装了属性和方法,想要访问 Java 中的属性和方法,首先要获得 Java 类或 Java 对象,然后再访问属性、调用方法。 在 Java 中类成员指静态属性和静态方法,它们属于类而不属于对象。而对象成员是指非静态属性和非静态方法,他们属于具体一个对象,不同的对象其成员是不同的,所以在本地代码中,对类成员的访问和对对象成员的访问是不同的。 1、获取 Java 类的两种方式 (1)通过传入JNI中的完整类名来获取类 // name:类全名,包含包名,包名间隔符用 “/” jclass FindClass( const char * name); // JNI获得Android中的类并保存在jActivity中 jclass jcls = env->FindClass( " com/aaron/link/LedNative " ); (2)通过传入JNI中的一个java的对象来获取该对象的类 // obj: 引用类型 jclass GetObjectClass(jobject obj); // JNI获得引用obj所对应的类 jclass myCls = env->GetObjectClass(obj); 2、获取 Java 属性 ID 和方法 ID

Android JNI开发系列(七)访问数组

与世无争的帅哥 提交于 2019-12-02 08:15:36
JNI访问数组 JNI 中的数组分为基本类型数组和对象数组,它们的处理方式是不一样的,基本类型数组中的所有元素都是 JNI 的基本数据类型,可以直接访问。而对象数组中的所有元素是一个类的实例或其它数组的引用,和字符串操作一样,不能直接访问 Java 传递给 JNI 层的数组,必须选择合适的 JNI 函数来访问和设置 Java 层的数组对象。 访问基本数据类型数组 // // Created by Peng Cai on 2018/10/10. // #include <jni.h> #include <stdlib.h> #include <string.h> JNIEXPORT jint JNICALL Java_org_professor_jni_bean_Student_sum(JNIEnv *env, jobject instance, jintArray stuScore_) { //GetIntArrayElements 第三个参数表示返回的数组指针是原始数组, // 还是拷贝原始数据到临时缓冲区的指针,如果是 JNI_TRUE:表示临时缓冲区数组指针, // JNI_FALSE:表示临时原始数组指针。开发当中,我们并不关心它从哪里返回的数组指针, // 这个参数填 NULL 即可,但在获取到的指针必须做校验,因为当原始数据在内存当中不是连续存放的情况下, // JVM