在Java程序開發(fā)中,常常需要使用socket進(jìn)行網(wǎng)絡(luò)通訊。而隨著RESTful風(fēng)格的興起,JSON格式的數(shù)據(jù)傳輸也變得越來(lái)越流行。所以,如何在Java socket中傳輸JSON數(shù)據(jù)就成為了一個(gè)常見的問題。
// 以下是一個(gè)簡(jiǎn)單的JSON字符串 String jsonString = "{\"name\":\"Jack\",\"age\":25}"; // 創(chuàng)建socket客戶端 Socket socket = new Socket("127.0.0.1", 8888); // 獲取輸出流,用于向服務(wù)器發(fā)送數(shù)據(jù) OutputStream outputStream = socket.getOutputStream(); // 將JSON字符串轉(zhuǎn)換為字節(jié)數(shù)組 byte[] jsonData = jsonString.getBytes("UTF-8"); // 發(fā)送數(shù)據(jù) outputStream.write(jsonData);
上述代碼中,我們首先創(chuàng)建了一個(gè)JSON字符串,并將其轉(zhuǎn)換為字節(jié)數(shù)組。然后,通過socket客戶端獲取輸出流,并將字節(jié)數(shù)組發(fā)送給服務(wù)器。需要注意的是,這里的編碼方式應(yīng)該和接收方保持一致。
// 創(chuàng)建socket服務(wù)器,等待客戶端連接 ServerSocket serverSocket = new ServerSocket(8888); Socket socket = serverSocket.accept(); // 獲取輸入流,用于接收客戶端發(fā)送的數(shù)據(jù) InputStream inputStream = socket.getInputStream(); // 定義緩沖區(qū) byte[] buffer = new byte[1024]; // 讀取數(shù)據(jù) int len = inputStream.read(buffer); // 將字節(jié)數(shù)組轉(zhuǎn)換為字符串 String jsonString = new String(buffer, 0, len, "UTF-8"); // 將JSON字符串轉(zhuǎn)換為JSONObject對(duì)象 JSONObject jsonObject = new JSONObject(jsonString); // 獲取關(guān)鍵字段值 String name = jsonObject.getString("name"); int age = jsonObject.getInt("age");
上述代碼中,我們首先創(chuàng)建了一個(gè)socket服務(wù)器,并等待客戶端連接。當(dāng)客戶端連接成功后,我們獲取輸入流,并讀取客戶端發(fā)送過來(lái)的JSON字符串。接著,我們將JSON字符串轉(zhuǎn)換為JSONObject對(duì)象,并從中獲取我們需要的關(guān)鍵字段值。
綜上所述,傳輸JSON數(shù)據(jù)在Java socket中并不復(fù)雜,只需要將JSON字符串轉(zhuǎn)換為字節(jié)數(shù)組,然后通過輸入輸出流進(jìn)行傳輸即可。當(dāng)然,在實(shí)際開發(fā)中,還需要注意編碼方式、數(shù)據(jù)格式等問題。