<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                通過前面的分析,解決了JNI函數的注冊問題。下面來研究數據類型轉換的問題。 在Java中調用native函數傳遞的參數是Java數據類型,那么這些參數類型到了JNI層會變成什么呢? Java數據類型分為基本數據類型和引用數據類型兩種,JNI層也是區別對待這二者的。先來看基本數據類型的轉換。 (1)基本類型的轉換 基本類型的轉換很簡單,可用表2-1表示: :-: 表2-1 基本數據類型轉換關系表 | Java | Native類型 | 符號屬性 | 字長 | | --- | --- | --- | --- | |boolean | jboolean | 無符號 | 8位 | | byte | jbyte | 無符號 | 8位 | | char | jchar | 無符號| 16位 | | short | jshort | 有符號| 16位 | | int | jint |有符號 | 32位 | | long | jlong | 有符號 | 64位 | | float | jfloat | 有符號 | 32位 | | double | jdouble| 有符號 | 64位 | 上面列出了Java基本數據類型和JNI層數據類型對應的轉換關系,非常簡單。不過,應務必注意,轉換成Native類型后對應數據類型的字長,例如jchar在Native語言中是16位,占兩個字節,這和普通的char占一個字節的情況完全不一樣。 接下來看Java引用數據類型的轉換。 (2)引用數據類型的轉換 引用數據類型的轉換如表2-2所示: :-: 表2-2 Java引用數據類型轉換關系表 | Java引用類型 | Native類型 | Java引用類型 | Native類型 | | --- | --- | --- | --- | | All objects | jobject | char[] |jcharArray | | java.lang.Class實例 | jclass | short[] | jshortArray | | java.lang.String實例 | jstring | int[] | jintArray | | Object[] | jobjectArray | long[] | jlongArray | | boolean[] | jbooleanArray | float[] | floatArray | | byte[] |jbyteArray | double[] | jdoubleArray | | java.lang.Throwable實例 | jthrowable | | | 由上表可知: - 除了Java中基本數據類型的數組、Class、String和Throwable外,其余所有Java對象的數據類型在JNI中都用jobject表示。 這一點太讓人驚訝了!看processFile這個函數: ~~~ //Java層processFile有三個參數。 processFile(String path, StringmimeType,MediaScannerClient client); //JNI層對應的函數,最后三個參數和processFile的參數對應。 android_media_MediaScanner_processFile(JNIEnv*env, jobject thiz, jstring path, jstring mimeType, jobject client) ~~~ 從上面這段代碼中可以發現: - Java的String類型在JNI層對應為jstring。 - Java的MediaScannerClient類型在JNI層對應為jobject。 如果對象類型都用jobject表示,就好比是Native層的void*類型一樣,對碼農來說,是完全透明的。既然是透明的,那該如何使用和操作它們呢?在回答這個問題之前,再來仔細看看上面那個android_media_MediaScanner_processFile函數,代碼如下: ~~~ /* Java中的processFile只有三個參數,為什么JNI層對應的函數會有五個參數呢?第一個參數中的JNIEnv是什么?稍后介紹。第二個參數jobject代表Java層的MediaScanner對象,它表示 是在哪個MediaScanner對象上調用的processFile。如果Java層是static函數的話,那么 這個參數將是jclass,表示是在調用哪個Java Class的靜態函數。 */ android_media_MediaScanner_processFile(JNIEnv*env, jobject thiz, jstring path, jstring mimeType, jobject client) ~~~ 上面的代碼,引出了下面幾節的主角JNIEnv。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看