我有一个我不太了解的问题。我在两台单独的计算机上有一个服务器套接字和一个客户端套接字。服务器将不断以十六进制发送数据,而连接的客户端将读取数据流并进行一些工作。
大多数流量都以这种方式发生。在极少数情况下,客户端会将字节字符串发送到服务器。在这一点上,我正在
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
最佳答案
您的客户端未使用ObjectOutputStream
写入数据:这就是为什么您看到此异常的原因。 ObjectOutputStream
和ObjectInputStream
用于序列化和反序列化Java对象。
代替使用ObjectInputStream
读取数据,可以考虑使用BufferedReader
或DataInputStream
。
请参见this example for more details。