Java invalid stream header: 7371007E

17,689

You've likely got your streams in a twist.

When you construct an ObjectInputStream, the constructor reads the first two bytes from the stream expecting them to be the "magic values" that should be present in an object stream. If they're not there, it throws the StreamCorruptedException (this is all in the ObjectInputStream source code).

So it would appear that you're wrapper an InputStream in an ObjectInputStream when in fact the data coming down from the other end of the connection is not actually an object stream. Perhaps it's still sending data from a previous communication.

Share:
17,689
dododedodonl
Author by

dododedodonl

Sysadmin, also programmer.

Updated on June 04, 2022

Comments

  • dododedodonl
    dododedodonl almost 2 years

    I am building a client-server application. Now I want to forward the message from a client to all other client with this code:

    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()));
     }
    }
    

    On the client side the program is listening for messages. It throws this exception:

    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)
    

    MessageListener:

                 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;
    }
    

    Does someone see the error?

  • dododedodonl
    dododedodonl about 14 years
    I now see my error. I changed the way of constructing the listener thread, but didn't realized that the InputStream still was build in the run() method. Thanks!