2016-12-09 22 views
-3

我正在創建一個Java應用程序,它需要客戶端與其他客戶端進行通信(發送&接收數據)。 我已經制作了一個簡單的服務器應用程序,以使客戶端通信更容易。 要進行通信,服務器&客戶端使用我創建的名爲「請求」的類。首先,我在想一個簡單的ObjectOutputStream/InputStream將能夠發送/接收我的請求對象,它是!但我已經改變了我的計劃: 現在,我將我的請求對象序列化爲一個字節數組,然後用密碼對它進行封裝。我已經做了解密&反序列化的方法,但我不知道如何讀取與請求對應的字節數組。搜索後,我發現要知道有多少個字節需要讀取,我必須發送一個int字節數組。我還發現存在一個ByteArrayOuputStream/InputStream,是否適合我?以及如何讀取/寫入字節數組的整體? 謝謝!祝你今天愉快!我如何知道我在用Java套接字閱讀的內容?

+0

所以你打破了你的設計。所以不要這樣做。 – EJP

+0

@EJP你是什麼意思?我只是加密我的數據,並加密它,我必須使它成爲一個字節數組。 – ByProcyx

回答

1

在發送側,寫字節數組的長度,然後再實際字節數組:

OutputStream os = ...; 
byte[] data = ...; 
int dataLength = data.length; 
os.write(dataLength >> 24); 
os.write(dataLength >> 16); 
os.write(dataLength >> 8); 
os.write(dataLength); 
os.write(data); 

在接收側,讀取的前四個字節,重建數據的長度,然後讀出的從輸入流的字節相應的號碼:

InputStream is = ...; 
byte[] buf = new byte[4]; 
is.read(buf); 
int dataLength = (buf[0] << 24) + (buf[1] << 16) + (buf[2] << 8) + buf[3]; 
// read rest of data according to dataLength 

注: 上面代碼段不包括必要的完整性檢查!

+0

謝謝你!完美的作品:D – ByProcyx

相關問題