做項目,無論是遺留產品的再生產,還是對遺留產品的再利用,都不可避免的會出現一大堆的異構現象。解決異構通信問題是這類項目的主要問題。以前看見這種情況第一個解決方案就是Socket通信。說實在的自己實現Socket通信,定制通信協議,或者是實現已有的通信協議都是很頭痛的事情。本人有不堪回首的歷史經歷。
最近同樣在項目中需要去解決一個異構問題,由于時間的緊迫,以及先天的運行環境(兩個部分是運行在同一臺機器上的)。考慮到了使用JNI,結果表明JNI是完全可以勝任目前的角色的。以前沒有了解過JNI,總是以為它這不好那不好,用了用,表現還不錯,而且實現起來非常之簡單。
整個實現過程可以分為五步來完成:
1)寫一個聲明了native的Java文件:














2) 使用javah產生對應的CPP頭文件:
命令:javah -classpath <path> -jni example.TestJNI -d <out_dir>
生成的頭文件example_TestJNI.h如下:



























3)實現對應的CPP代碼:













4) 編譯CPP代碼
命令:g++ -o libtest.so -shared -I<include_path> -I<java_home>/include -I<java_home>/include/linux example_TestJNI.cpp
5)執行













export LD_EXPORT_PATH=<so_path>
java -cp <path> -Djava.library.path=<so_path> example.Test
輸出:Hello Tower