Java无效流标头:7371007E

Java无效流标头:7371007E,java,serialization,io,Java,Serialization,Io,我正在构建一个客户机-服务器应用程序。现在,我想使用以下代码将消息从一个客户端转发到所有其他客户端: ArrayList<User> usrs = _usrHandler.getUsers(); for(User usr : usrs) { if(!usr.getSocket().equals(_connection)) { usr._oOut.writeObject(new CommunicationMessage(this._comMsg.getMessa

我正在构建一个客户机-服务器应用程序。现在,我想使用以下代码将消息从一个客户端转发到所有其他客户端:

ArrayList<User> usrs = _usrHandler.getUsers();
for(User usr : usrs) {
    if(!usr.getSocket().equals(_connection)) {
        usr._oOut.writeObject(new CommunicationMessage(this._comMsg.getMessage(), CommunicationMessage.MSG, 
                                                    this._comMsg.getUser()));
 }
}

有人看到错误了吗?

您的数据流可能出了问题

当您构造
ObjectInputStream
时,构造函数从流中读取前两个字节,期望它们是对象流中应该存在的“神奇值”。如果它们不在那里,它会抛出
StreamCorruptedException
(这都在
ObjectInputStream
源代码中)


因此,看起来您是在
ObjectInputStream
中包装
InputStream
,而实际上,从连接另一端下来的数据实际上不是对象流。可能它仍在发送以前通信的数据。

我现在看到了我的错误。我改变了构建侦听器线程的方式,但没有意识到,
InputStream
仍然是在run()方法中构建的。谢谢
java.io.StreamCorruptedException: invalid stream header: 7371007E
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:783)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:280)
    at Connection$MessageListener.run(Connection.java:126)
    at java.lang.Thread.run(Thread.java:637)
             while(this._loop) {
 this._comMsg = (CommunicationMessage) this._dataInput.readObject();

 SimpleAttributeSet attr = new SimpleAttributeSet();
 attr.addAttribute(StyleConstants.CharacterConstants.Bold, Boolean.TRUE);
 attr.addAttribute(StyleConstants.CharacterConstants.Foreground, _comMsg.getUser().getColor());

 messageClient.addMessage(_comMsg.getUser().getNickName() + ": ", attr);
 messageClient.addMessage(_comMsg.getMessage(), _comMsg.getUser().getColor());

 _comMsg = null;
}