ObjectInputStream StringCorruptedException

Xerses

Mitglied
Hallo zusammen,

ich bastele derzeit an einem kleinen Programm herum, welches Netzwerkeigenschaften aufweist.

Zu meinem Problem:

Ich programmiere gerade das Login, was leider noch nicht ganz funktioniert. Ich bekomme an einer Stelle eine StringCorruptedException


Java:
public class Login implements Runnable {

    InputStream is;
    OutputStream os;
    ObjectOutputStream oos;

    public Login(InputStream is, OutputStream os) {
        this.is = is;
        this.os = os;
        try {
            oos = new ObjectOutputStream(this.os);
        } catch (IOException ex) {
            System.out.println(ex);
        }
    }

    @Override
    public void run() {

        String input = "";
        String[] inputForLogin;
        String username = "";
        String password = "";
        boolean usernameCorrect = false;
        boolean passwordCorrect = false;
        String answer = "ACK";

        try {
            oos.writeObject(answer);
            input = (String) new ObjectInputStream(is).readObject();
            System.out.println(input);

            //....
        } catch (Exception e) {
            System.out.println("Fehler beim Senden: "+e);
        }                
    }
}

Ich schätze es liegt am
Java:
input = (String) new ObjectInputStream(is).readObject();


Mit dieser Methode habe ich es an einer anderen Stelle auch gemacht und es funktioniert.
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
eine StringCorruptedException gibts in der normalen API gar nicht,
sicher dass es keine StreamCorruptedException ist?

bei der Suche nach StringCorruptedException kam ich lustigerweise an gleicher Verwechselung vorbei, falls bei dir auch eine:
http://www.java-forum.org/netzwerkp...corruptedexception-invalid-string-header.html
der Fehler dort ist bei dir ohne Schleife eher nicht zu sehen, aber hilft es vielleicht doch?
auf Streams immer sehr genau achten, nicht doppelt definieren usw.

edit zur unteren Antwort:
oh ja, wenn der Server nur einen String als normalen Text sendet, vielleicht gar ein nicht-Java-Server,
aber selbst in Java alles andere als ein ObjectOutputStream wäre schon eine Katastrophe
 
Zuletzt bearbeitet von einem Moderator:

Kr0e

Gesperrter Benutzer
Naja... ich vermute du verwendest die Streams falsch...

Ein ObjectOutputStream schreibt bei einer Erstellung 2 Short-Werte und ein ObjectInputStream liest bei einer Erstellung 2 Short Werte....

Wenn du das nicht beachtest kommen solche Fehler ;) Du hast nicht genug Code gesendet um den Fehler 100% zu identifizieren, z.B. wäre die GEgenseite noch interessant....

Ich zeige dir hier am ObjectOutputStream was ich meine:

Bei writeObject() wird intern das hier aufgerufen "writeStreamHeader();"

Code von writeStreamHeader():

Java:
    /**
     * The writeStreamHeader method is provided so subclasses can append or
     * prepend their own header to the stream.  It writes the magic number and
     * version to the stream.
     *
     * @throws	IOException if I/O errors occur while writing to the underlying
     * 		stream
     */
    protected void writeStreamHeader() throws IOException {
	bout.writeShort(STREAM_MAGIC);
	bout.writeShort(STREAM_VERSION);
    }

Frag mich nich, warum es die Magicnumber ist... Die SUN-Progger haben vlt ne Schraube locker :D Aber immerhin Sinn für Humor ^^

Beachte diese eifnache Regel und du hast nie Probleme mit Serialisierung ;)
 

Xerses

Mitglied
Ich hab jetzt überall wo ich was sende oder empfange ein neues ObjectInput- bzw. OutputStream erstellt. Auf diese Weise funktionieren meine Übertragungen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D new ObjectInputStream(socket.getInputStream()); Netzwerkprogrammierung 15
G ObjectOutputStream und ObjectInputStream machen Ärger Netzwerkprogrammierung 17
F ObjectInputStream.readObject() mehrfach aufrufen Netzwerkprogrammierung 2
J ObjectInputStream im Netzwerk Netzwerkprogrammierung 8
K ObjectInputStream EOF Netzwerkprogrammierung 6
G ObjectInputStream hängt ganzes Programm auf... Netzwerkprogrammierung 7
V StreamCorruptedException bei ObjectInputStream und ObjectOStream Netzwerkprogrammierung 5
S FileInputStream und ObjectInputStream Netzwerkprogrammierung 18
C Socket ObjectInputStream liest nur Objekte der jeweiligen Programminstanz Netzwerkprogrammierung 5
M InputStream and ObjectInputStream zur gleichen Zeit Netzwerkprogrammierung 11
J Socket ObjectInputStream prüfen Netzwerkprogrammierung 8
N Socket neue Referenz auf ObjectInputStream Netzwerkprogrammierung 13
E Rausfinden ob noch Objecte in ObjectInputStream Netzwerkprogrammierung 5
Y Problem mit ObjectInputStream beim lesen vom Socket Netzwerkprogrammierung 10
C komisches Problem / ObjectInputStream erstellt sich nicht Netzwerkprogrammierung 5
K ObjectInputStream mit CypherInputStream hängt Netzwerkprogrammierung 7
G Datei über ObjectInputStream versenden Netzwerkprogrammierung 8
R ObjectOutput- / ObjectInputStream Exception? Netzwerkprogrammierung 2
E ObjectInputStream/ObjectOutputStream nicht erzeugbar Netzwerkprogrammierung 2
T Problem mit ObjectInputStream Netzwerkprogrammierung 2
C Kollision von ObjectInputStream und BufferedReader ? Netzwerkprogrammierung 6
G ObjectInputStream gebuffert? Netzwerkprogrammierung 3
A StringCorruptedException: invalid String header Netzwerkprogrammierung 2

Ähnliche Java Themen


Oben