【问题标题】:Java InputStream throwing java.io.StreamCorruptedExceptionJava InputStream 抛出 java.io.StreamCorruptedException
【发布时间】:2017-07-21 08:44:23
【问题描述】:

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

【问题讨论】:

  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及重现它所需的最短代码在问题本身。

标签: java sockets


【解决方案1】:

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

考虑使用BufferedReaderDataInputStream,而不是使用ObjectInputStream 来读取数据。

this example for more details

【讨论】:

    猜你喜欢
    • 2012-02-06
    • 2012-05-20
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 2011-09-16
    • 2011-04-05
    相关资源
    最近更新 更多