-1

我有一个在多个线程之间共享的向量,当我尝试使用其中一个线程从该向量中读取时,我得到了 StreamCorruptedException。

这是异常的堆栈跟踪:

java.io.StreamCorruptedException: invalid stream header: 7371007E at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:801) at java.io.ObjectInputStream.<init>(ObjectInputStream.java:298) at prj.ReadThread.run(ReadThread.java:32

在 prj.ReadThread.run 中产生此异常的代码行是

ObjectInputStream o = new ObjectInputStream(RS.getInputStream());

如果需要更多信息,请告诉我。

4

2 回答 2

2

堆栈跟踪没有帮助吗?

异常似乎被抛出readStreamHeader(),您可以在调试器中单步执行。我怀疑版本号不匹配。许多类都包含警告:此类的序列化对象将与未来的 Xxx 版本不兼容。

附录:@S Kh 有用地报告了以下内容:

问题是因为 Java 中的流。我正在从服务器上的唯一流(an)发送数据包ObjectOutputStream,但我每次在客户端通过new ObjectInputStream每个数据包从不同的流中接收数据。所以我得到了这个例外。

于 2012-11-25T11:08:45.627 回答
1

默认情况下,向量是同步的。如果您在线程之间共享它们,请检查它们实际实现的同步策略是否足以使您的程序线程安全(因为某些同步的存在很少表明类的全面并发行为)

于 2012-11-25T10:12:11.937 回答