1

我试图通过单个发送不同类的多个可序列化对象

ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());

但是,我总是得到一个

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

我已经通过论坛并尝试过out.reset(),但它似乎不起作用。我做错了什么或错过了什么?

请帮忙

4

2 回答 2

2

损坏的是流,而不是ObjectOutputStream. 那是一个类的名称。

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

解决方案:不要那样做。您不能将多个附加ObjectOutputStreams到文件,也不能ObjectOutputStreams在套接字上使用多个,除非您具有足够的协调能力,可以在流中最后一个停止ObjectInputStream的精确点创建一个新的:相反,您必须使用和插座的使用寿命ObjectOutputStream相同。ObjectInputStreamObjectOutputStream

于 2012-04-25T10:05:25.483 回答
1

您很可能错误地使用了 ObjectOutputStream 或 ObjectInputStream。

常见错误包括

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

顺便说一句:在使用 ObjectInputStream 之前,您应该始终先创建 ObjectOutputStream 并刷新()它。

于 2012-04-25T10:23:39.767 回答