Java InputStream抛出java.io.StreamCorruptedException

时间:2017-07-21 00:32:44

标签: java sockets

我有一个我不太明白的问题。我在两台独立的机器上有一个服务器套接字和一个客户端套接字服务器将不断发送十六进制数据,连接的客户端将读取数据流并做一些工作。 大部分流量都是以这种方式发生的。在少数情况下,客户端将向服务器发送字节字符串。在这一点上,我得到了 此行的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)

&#34; 020001B5&#34;正是客户端发送到服务器的字节串。

我不明白为什么我得到这个StreamCorruptedException。我的 代码逻辑没有任何&#34;流标题&#34;。什么是流标题? 我检查了javadoc,我无法弄清楚为什么会发生这种情况。

任何提示都非常赞赏。

感谢

-v

1 个答案:

答案 0 :(得分:1)

您的客户未使用ObjectOutputStream撰写数据:这就是您查看此异常的原因。 ObjectOutputStreamObjectInputStream用于序列化和反序列化Java对象。

不要使用ObjectInputStream来读取数据,而应考虑使用BufferedReaderDataInputStream

请参阅this example for more details