我有一个在多个线程之间共享的向量,当我尝试使用其中一个线程从这个向量读取时,我得到了一个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());
如果需要更多信息,请告诉我。
答案 0 :(得分:2)
堆栈跟踪不是很有用吗?
readStreamHeader()
中似乎抛出了异常,您可以在调试器中单步调试。我怀疑version number不匹配。许多类都包含警告:此类的序列化对象与将来的Xxx版本不兼容。
附录:@S Kh帮助报告以下内容:
问题是因为Java中的流。我是从服务器上的唯一流发送数据包(
ObjectOutputStream
),但是每次在客户端上通过new ObjectInputStream
为每个数据包接收来自不同流的数据。所以我得到了这个例外。
答案 1 :(得分:1)
默认情况下,矢量是同步的。如果您在线程之间共享它们,请检查它们实现的同步策略是否足以使您的程序线程安全(因为某些同步的存在几乎不表示类的全面并发行为)