2017-08-28 94 views
2

我遇到了如何在不破壞數據的情況下處理字節數據的問題。這裏是我的代碼如何在不破壞數據的情況下處理字節流

... 
byte[] b = new byte[1000]; 

// read input stream 
BufferedInputStream inData = new BufferedInputStream(socket.getInputStream()); 
int length = inData.read(b); 

String data = new String(b, 0, length); 
if (Log4j.log.isEnabledFor(Level.INFO)) { 
    Log4j.log.info("Data Length: " + length 
      + ", Received data: " + data); 
} 

... 
// start a new socket to other server 
... 
BufferedOutputStream out = new BufferedOutputStream(remote.getOutputStream()); 

out.write(data.getBytes()); 
out.flush(); 
... 

這裏看起來沒什麼問題。但是,如果我有一個十六進制字符串像

F8 F0 F0 C2 20 00 00 80 00 00 

C2一些數據會變成3F。我可以在我的日誌&遠程服務器的日誌中看到這一點。

起初,我懷疑它會溢出。但由於這些數據將被視爲十六進制字符串併發送到另一臺服務器,因此這種懷疑將被越過。

我不知道這件事發生了什麼,所以如果有人知道這個問題,我真的可以使用一些幫助。

回答

3

現在您正在使用平臺默認字符集將字節轉換爲String,然後稍後再調用getBytes()。如果該字節在該字符集中不代表有效的字符串,則數據將丟失,例如,無效字節將被替換爲字符'?'

停止。如果你有字節,將它們作爲byte[]傳遞給它們。不要將它們轉換成String

+0

啊,你是對的!我的其他測試字符串正確傳遞它,所以我認爲我的代碼沒有錯。 – Kaninchen

相關問題