我有一个客户端和服务器应用程序,它使用TCP上的序列化传输消息。反序列化对象时出现以下错误:
有关原因的任何想法或分析此问题的可能后续步骤?
java.io.StreamCorruptedException: invalid stream header: 383D4649
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
at com.aqua.NmsApi.ResiliantTCPServer$ServerThread.run(ResiliantTCPServer.java:248)
at java.lang.Thread.run(Unknown Source)
答案 0 :(得分:1)
序列化数据头部的幻数有问题。您可能需要捕获序列化数据并自行查看。那个ascii流是'8 = FI'。
答案 1 :(得分:1)
有两个可能的原因:
该流实际上已损坏(即您正在阅读的内容与您在另一端所写的内容不同)。在这种情况下,您应该在本地文件中写入每个内容(发出和接收),并进行比较。
您正在使用的ObjectInputStream实现所需的幻数在两端都是不同的,例如因为您使用的是不同版本的Java基础包。这些常量在ObjectStreamConstants中声明,你应该检查它们。
答案 2 :(得分:0)
你是否每个套接字Input / OutputStream使用一个ObjectInput / OutputStream?在相同的输入/输出流上重新创建这些是导致此类错误的常见原因。