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














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



























3)實現(xiàn)對應的CPP代碼:













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













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