1。用JNI效率当然高,但是,跨平台的时候,可能会麻烦一些;
2。用Socket来通信,那么,这两个程序就可以分布到不同机器上,效率当然不如JNI直接调用高;但是,java部分的程序可以直接跨平台;采用这种方案需要做socket通信,会增加大量工作,而且要想做出一个稳定的socket,不是那么简单;如果c程序部分的功能很简单,我觉得用JNI好些;
如果c程序部分的功能很复杂,那么不益采用JNI,还是做成分布式,用socket来通信;另外,通信方式,不一定就要采用底层的socket,可以考虑采用一些比较成熟的中间件,如:RPC,CORBA,XML-RPC等。