我的工作一些網絡與Java和我有一個對象轉換爲一個字節數組,分割該陣列分成2份,發送每個通過TCP流,接收它,重建所述的問題字節數組,然後重新對象。爪哇 - 無效流頭
到目前爲止,這一切都工作。除了對象的重建之外,我擁有所有這些。使用ObjectInputStream時出現此錯誤:
java.io.StreamCorruptedException: invalid stream header: 34323435
這是我在線看到的常見錯誤。我試圖修復它。我聽說的原因之一是在發送字節後流不會被刷新,但是我的代碼在發送之前確實會流水。我的代碼發送數據是:
public void sendTcp(ObjectOutputStream tcpOut) {
try {
synchronized(tcpOut) {
tcpOut.write(data);
tcpOut.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
}
而且我能夠成功讀取服務器端的這些字節。將這些字節組合在一起時會出現問題。一旦完成,我用它來重新創建對象:
ByteArrayInputStream in = new ByteArrayInputStream(data);
ObjectInputStream is = new ObjectInputStream(in);
Object object = is.readObject();
is.close();
in.close();
但是在ObjectInputStream行上會拋出錯誤。我也通過調試查看了原始數據,並且它們都匹配起來。對象的字節在被拆分併發送之前,與接收後重新組合的字節相匹配。我一直堅持這一點,如果有人可以幫助,這將是非常有益的。
你能夠建立基於相同的字節在客戶端的對象? –
我已經嘗試過,但是我所做的是首先創建一個新的ByteArrayOutputSteam,然後創建一個新的ObjectOutputStream,然後編寫該對象並獲取該對象的字節。然後我沖洗並關閉這些流。然後我把這個數組分成幾部分,然後通過連接到Socket輸出流的ObjectOutputStream發送每個數組(對於套接字只有一個對象輸出流,我不重新創建它)。然後我在服務器端接收它並將這些陣列放在一起。 – Jmrapp
然後我把那個單個數組發送給一個新的ByteArrayInputStream,然後把它發送給一個新的ObjectInputStream。然後我使用它來獲取對象,但它創建ObjectInputStream時會引發該錯誤 – Jmrapp