套接字损坏的ObjectOutputStream

时间:2012-04-25 09:59:53

标签: java sockets serializable

我试图通过单个

发送不同类的多个可序列化对象
ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());

但是,我总是得到一个

  

java.io.StreamCorruptedException:无效的类型代码:AC

我已经通过论坛并尝试了out.reset()但它似乎没有用。 我做错了什么或遗失了什么?

请帮忙

2 个答案:

答案 0 :(得分:2)

流已损坏,而不是ObjectOutputStream。这是一个类的名称。

当您尝试使用单个ObjectOutputStreams读取多个ObjectInputStream的结果时,会出现此问题。它无效。 ObjectOutputStream写一个标题,以 - 猜猜是什么? 0xAC。因此,当您使用单个ObjectInputStream读取由多个ObjectOutputStreams创建的流时,它会发现意外的0xAC并抛出该异常。

解决方案:不要那样做。您不能将多个ObjectOutputStreams附加到文件中,并且您不能在套接字上使用多个ObjectOutputStreams,除非您具有足够的协调以完全创建新的ObjectInputStream在最后ObjectOutputStream停止的流中指向:相反,您必须在套接字的生命周期中使用相同的ObjectInputStreamObjectOutputStream

答案 1 :(得分:1)

您最有可能错误地使用ObjectOutputStream或ObjectInputStream。

常见错误包括

  • 在同一个底层流上使用多个Object流。只使用一个。
  • 使用Object Stream和另一个流包装器,如Writer / Reader或DataInput / OutputStream。

顺便说一下:在使用ObjectInputStream之前,你应该首先创建ObjectOutputStream并刷新它()。