我正在编写一个客户端/服务器应用程序,它主要传输包装在自己定义的对象中的JPEG图像。 现在我通过套接字连接遇到了ObjectStreams的问题。 这不是一个重复的问题,因为我几乎在StackOverflow上阅读了关于这个主题的每个问题,但没有一个问题解决了我的问题。 我所做的基本上是读取和写入包含原始数据类型的序列化对象。
我得到的错误:
java.io.StreamCorruptedException: invalid type code: 00
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1379)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1993)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1918)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
错误因无效的类型代码(00,AC,...)而异,很少有无效的流标题。
我现在不想发布任何代码,因为我需要一个关于流如何被破坏以及如何防止它的更抽象,更理论的答案。 但如果真的需要,我当然会发布它。 我使用默认的readObject()和writeObject()方法来传输仅为同一文件中的服务器和客户端定义的1种Object。 我在套接字的生命周期内只获得了一个ObjectInputStream和OutputStream实例。 发生ClassCastException,ClassNotFoundException和EOFException(不知道为什么),但处理得当。
关于它的疯狂之处在于错误发生错误并且仅在几分钟后正常运行。
这就是为什么我需要知道其他情况可以"腐败"一条小溪。 正如我所说,它在几分钟内完美无缺(在这个时间段内有成千上万的物体被正确转移),然后它会出现。
感谢您对此主题的任何参与和想法。 谢谢
答案 0 :(得分:0)
我建议您首先检查服务器端的流堆栈。 (然后是客户端堆栈,但我认为它更简单)。
如果你在socketoutputstream上的某个bufferedoutputstream上有一个简单的Objectoutputstream,那么很可能不会发生这种情况。
您的服务器可能有奇怪的过滤器流,如gzip或某些tomcat / jboss包装器,也许是httpservletresponsewrapper的输出流干扰。可能是损坏您的流的I / O错误,例如连接已关闭,但错误被流堆栈掩盖和歪曲。 Wireshark是你排除明显问题的朋友。