⑴ 設計java程序與C語言的介面
JNI就是Java程序與C語言的介面,是sun提供的java與系統中的原生方法交互的技術,也有很多開源項目以JNI為基礎,包裝了Java本機介面與C/C++交互的技術,有很多帖子都講得很詳細了,在這就不多說了,自己多看幾篇也就明白了。設計?這個話題太大,作為一個小小的程序員,我的願景是希望有一天編譯器能夠智能的將我寫的是Java與C的混合代碼編譯成一個程序,語言之間的交互讓編譯器去做吧,哈哈哈
⑵ java編寫的程序與C語言編寫的程序怎麼進行通信
您好,你可以用兩個不同進程之間的數據交互:
1、可以選擇socket通信
2、可以選擇文件,不過要注意好讀寫
3、消息傳遞,在windows下拋出一個消息//具體怎麼做我沒試過,只知道有這方法
4、資料庫//這個比較容易實現
這樣就可以選擇用不同語言寫出來的程序了
⑶ java程序和C程序如何相互通信
換下思路,C去調用資料庫,然後保存到資料庫阿java調用資料庫得到C處理完存入資料庫的數據就可以了.
結構如圖這樣就少想不同語言間的交流,而且java和C的交互不是很好,貌似java貌似可以支持DLL,但是不方便
⑷ Java和C的區別
Java和C都是指令式語言(Imperative Language),不同的是Java有面向對象(OO)成分在裡面,而C是完全面向過程的,C的高級版本C++、C#支持面向對象。
另外一個不同是,Java跨平台,既不同的操作系統都可以通過JVM來解釋Java程序,而C、C++、C#則是與平台相關的,有些指令只在某些操作系統中才能執行。具體原因是,Java是解釋型語言,所有代碼都會翻譯成統一的、與系統無關的bytecode,然後放到JVM上運行;而C是編譯式語言,代碼要先通過編譯器轉換成與系統相關的中間代碼,然後才能運行。
再一個不同是,Java不支持系統調用,既無法與操作系統進行交互,這是由它跨平台的特點決定的,而C則可以調用系統中的指令,如fork()。這也就是為什麼Java中只有線程(Thread)概念而沒有進程(Process)概念,而C兩者均有。
再者,Java無法對內存進行控制,而C則可以通過指針對內存進行人為分配。
還有一點,Java有Gabbage Collection機制,可以自動回收不再使用的空間,而C則要用free()函數釋放空間。
⑸ 關於JAVA和C
不用想,java比C要容易得多,java也具體有跨平台性。
只是 C入門比較容易,但要深入,是有一定難度的,如果是自學的話,不建議學習C
不知道你學到指針沒,一維指針,二維指針,各人覺得還是有點難理解的
C製作界面的方面不是很好,至少不如JAVA,C適合用於底層開發,嵌入式開發,大部分都是與硬體打交道。
其實java也不適合做可視化界面,JAVA大部分都是用來做企業級應用。
而可視化編程比較好的有VB,和C#等。要是你喜歡可視化編程的話,建議學習C#,不是很難
另外可視化C++也不錯,不過C++在可視化方面一般只用於大型的項目,網路游戲的開發。
⑹ JAVA和C語言可以共同開發某個應用軟體嗎
這個是可以的,因為有混合編程這個概念的,兩者只要環境在就可以了,程序就是為實現功能的。
⑺ 怎樣用 jni來交互java與 c/c++
JNI是Java Native Interface的縮寫,中文為JAVA本地調用。使用JNI可以很方便的用我們的Java程序調用C/C++程序。很多時候,某些功能用Java無法實現,比如說涉及到底層驅動的一些功能,這時候我們就可以利用JNI來調用C或者C++程序來實現,這就是JNI的強大之處。但是JNI也有它的缺點,使用java與本地已編譯的代碼交互,通常會喪失平台可移植性。
下面是一個JNI例子,調用C++輸出"hello world":
第一步:創建Java類,在裡面定義一個本地方法(用native關鍵字修飾的方法)
public native void sayHello();
第二步:使用javah命令(javah 類的全路徑)生成本地方法的C++頭文件
在DOS窗口中進入工程所在目錄,然後執行javah com.test.TestNative命令,執行完之後就會在當前目錄生成一個後綴名為.h的頭文件,如com_test_TestNative.h,這個頭文件是根據包名和類名來命名的。
1 /* DO NOT EDIT THIS FILE - it is machine generated */
2 #include <jni.h>
3 /* Header for class com_test_TestNative */
4
5 #ifndef _Included_com_test_TestNative
6 #define _Included_com_test_TestNative
7 #ifdef __cplusplus
8 extern "C" {
9 #endif
10 /*
11 * Class: com_test_TestNative
12 * Method: sayHello
13 * Signature: ()V
14 */
15 JNIEXPORT void JNICALL Java_com_test_TestNative_sayHello
16 (JNIEnv *, jobject);
17
18 #ifdef __cplusplus
19 }
20 #endif
21 #endif
15、16行是對TestNative類中的本地方法sayHello()的聲明。這個h文件相當於我們在java裡面的介面,這里聲明了一個 Java_com_test_TestNative_sayHello (JNIEnv *, jobject);方法,然後在我們的本地方法裡面實現這個方法,也就是說我們在編寫C/C++程序的時候所使用的方法名必須和這里的一致。
第三步:編寫C/C++本地代碼,生成動態鏈接庫文件
首先在VC6.0(當然也可以用其他工具)中創建一個dll工程---Win32 Dynamic-Link Library工程。然後將上面生成的頭文件com_test_TestNative.h添加到該工程中,然後創建一個源文件引用該頭文件並且實現頭文件中本地函數的功能:
1 #include<iostream.h>
2 #include"com_test_TestNative.h"
3
4 JNIEXPORT void JNICALL Java_com_test_TestNative_sayHello(JNIEnv *env, jobject obj)
5 {
6 cout<<"hello world!"<<endl;
7 }
這里因為com_test_TestNative.h中引入了jni.h所以要將jni.h加入到VC6.0安裝目錄下的Include目錄中。jni.h在JDK安裝目錄下的include中,同時得件include/win32中的兩個頭文件jawt_md.h、jni_md.h也導入到VC6.0中。
將所依賴的頭文件導入之後,我們就可以構建該工程了,按F7就行了,完了會在工程目錄中的Degug目錄下生成一個動態鏈接庫文件,我這里生成的是NativeCode.dll。我們就可以將該dll文件拷貝到環境變數path所包含的目錄下給咱們的Java程序調用了,為了方便,我們也可以將dll所在的工程目錄加入到環境變數path中去,這樣可以避免每次都要拷貝的麻煩。注意修改環境變數之後要重啟myeclipse。
第四步:Java調用本地函數
1 package com.test;
2
3 public class TestNative {
4 public native void sayHello();
5
6 /**
7 * @param args
8 */
9 public static void main(String[] args) {
10 System.loadLibrary("NativeCode");
11 TestNative tNative = new TestNative();
12 tNative.sayHello();
13 }
14 }
第10行是載入動態鏈接庫,JVM只需要載入一次就可以調用了,「NativeCode」是上面生成的動態鏈接庫的名字,不含後綴名。
運行該程序,成功列印輸出了"hello world"。
⑻ Java如何與C進行通信
兩個不同進程之間的數據交互:
1、可以選擇socket通信
2、可以選擇文件,不過要注意好讀寫
3、消息傳遞,在windows下拋出一個消息//具體怎麼做我沒試過,只知道有這方法
4、資料庫//這個比較容易實現
上面說的兩個不同進程,當然就是可以選擇用不同語言寫出來的程序了
⑼ java和c語言的長連接交互用什麼協議。在不考慮socket的情況下
為什麼不用socket 基於TCP/IP協議 安全不丟包
⑽ java怎麼引用c
Java調用C語言程序時,主要是涉及到操作系統底層的事件。這種時間Java無法處理,例如用戶上傳一個視頻文件,需要後台給視頻加上水印,或者後台分離視頻流和音頻流。只能通過調用C語言處理。
使用Java如何去調用C語言的介面呢?使用Java的JNI技術。
具體調用步驟如下:
1.首先創建Java文件 HelloJni.java ,並創建native方法。
2.編譯Java文件並生成java頭文件。
3.創建C語言文件,HelloWorld.c。
4.生成動態鏈接庫文件 libhello.so。
5.設置動態鏈接庫文件的目錄。
6.把剛才生成的so文件拷貝到/home/lib下,然後執行class文件。