JNI学习笔记四



  本地代码中创建java对象
   //第二个参数为构造方法
   jobject NewObject(jclass clazz, jmethodID methodID, ...)


   示例代码(使用默认构造器创建对象):
    jclass clazz_date=ent->FindClass("java/util/Date");
    jmethodID mid_date=env->GetMethodID(clazz_date,"<init>","()V");
    jobject now=env->NewObject(clazz_date,mid_date);




   java字串和本地代码中字串
    //utf-16
    GetStringChars 
    //utf-8 
   GetStringUTFChar
    
    示例代码:
     //参数一:指向java中string对象的jstring变量
     //参数二:boolean指针 是否对java中的String 对象进行拷贝
     const jchar* GetStringChar(jstring str,jboolean* copied);
     const char* GetStringUTFChar(jstring str,jboolean* copied);
    注:开新内存,将java中的string拷贝到这个内存中,然后返回这个内存的指针
        不要改变这个内存的内容,会破坏string在java中始终是个常量的原则
    
    在不使用的时候要使用releaceStringChars/releaceStringTUFChar释放内存
    //参数一:本地字串来源 参数二:本地字串
     ReleaceStringChars(jstring jstr,const jchar* str);
    ReleaceStringTUFChars(jstring jstr,const  char* str);


    
    const jchar* GetStringCritical(jsring str,jboolean* copied);
    void ReleaseStringCritical(jstring jstr,const jchar* str);
    




    //以下函数不会分配内存不会抛outOfMemoryError异常
    GetStringRegion
    GetStringUTFRegion
    示例代码如下:
   GetStringRegion(jstring str,jsize start,jsize len, char* buffer);
   GetStringUTFRegion(jstring str,jsize start,jsize len, jchar* buffer);








   其他的字符串函数
   jstring NewString(const jchar* str,jsize len);
   jstring NewStringUTF(const char* str);


   jsize GetStringLength(jstring str);
   jsize GetStringUTFLength(jstring str);

你可能感兴趣的:(java,Date,String,jni,buffer)