2017-07-21 63 views
0

我有一個問題,我不太明白。我有兩個獨立的機器上的服務器套接字和客戶端套接字。服務器將不斷髮送數據在十六進制和連接客戶端將讀取數據流並做一些工作。 大部分流量都是以這種方式發生的。在極少數情況下,客戶端會向服務器發送一個字節串。在這一點上,我得到 Java.io.StreamCorruptedException在這一行:Java InputStream拋出java.io.StreamCorruptedException

ObjectInputStream in = new 
    ObjectInputStream(socketFromClient.getInputStream()); 

例外:

java.io.StreamCorruptedException: invalid stream header: 020001B5 
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:857) 
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:349) 
    at ReadInput.run(ReadInput.java:21) 
    at java.lang.Thread.run(Thread.java:745) 

「020001B5」是完全字節串即客戶端發送到服務器。

我不明白爲什麼我得到這個StreamCorruptedException。我的 代碼邏輯沒有任何「流頭」。什麼是流標頭? 我檢查了javadoc,我無法理解爲什麼會發生這種情況。

任何提示非常感謝。

感謝

-v

+0

尋求調試幫助的問題(「爲什麼這個代碼不工作?」)必須包含所需的行爲,特定的問題或錯誤*以及在問題本身中重現它所需的最短代碼*。 –

回答

1

您的客戶端不寫使用ObjectOutputStream數據:這就是爲什麼你看到這個異常。 ObjectOutputStreamObjectInputStream用於序列化和反序列化Java對象。

而不是使用ObjectInputStream來讀取數據,請考慮使用BufferedReaderDataInputStream

請參閱this example for more details