Java.IO.StreamCorruptedException: Ungültiger Stream-Header

Sheeraz Gul 12 Oktober 2023
Java.IO.StreamCorruptedException: Ungültiger Stream-Header

Dieses Tutorial zeigt, wie Sie die Ausnahme java.io.StreamCorruptedException: invalid stream header von Java beheben.

java.io.StreamCorruptedException: Ungültiger Stream-Header in Java

Die java.io.StreamCorruptedException: invalid stream header ist eine relativ häufige Ausnahme. Um den Grund für diese Ausnahme zu verstehen, müssen wir den ungültigen Stream-Header in der Ausnahme sehen, da er den Grund für das Problem erklären kann.

Die StreamCorruptedException hat zwei Konstruktoren, den ersten mit einem Argument und den anderen ohne Argumente. Derjenige, der die Argumente akzeptiert, beschreibt die Gründe für die Ausnahme.

Die java.io.StreamCorruptedException: invalid stream header: XXXXXX ist die Ausnahme mit dem Argument, bei dem XXXXXX die ungültigen Header-Details darstellt.

Diese Ausnahme tritt häufig auf, wenn wir mit ObjectInputStream arbeiten. Denn laut Javadoc können nur solche Objekte aus Streams gelesen werden, die java.io.Serializable oder java.io.Externalizable unterstützen.

Wann immer wir also den ObjectInputStream verwenden, sollte er mit den serialisierten Daten verwendet werden. Die meisten der StreamCorruptedException: ungültiger Stream-Header treten auf, wenn eine Datei wie Text, HTML, XML, JSON usw. direkt an den ObjectInputStream-Konstruktor übergeben wird, anstatt eine serialisierbare Datei.

Hier sind einige häufig auftretende java.io.StreamCorruptedException: invalid stream header mit entsprechenden ASCII-Werten.

HEX-Wert für ungültigen Stream-Header Ganze Zahlen für HEX ASCII-Werte für HEX
54657374 084 101 115 116 Test
48656C6C 072 101 108 108 Hell
54656D70 084 101 109 112 Temp
4920616D 073 032 097 109 I am
54686973 084 104 105 115 This
20646520 032 100 101 032 de
30313031 048 049 048 049 0101
32303138 050 048 049 056 2018
41434544 065 067 069 068 ACED
64617364 100 097 115 100 dasd
72657175 114 101 113 117 requ
7371007E 115 113 000 126 sq ~
70707070 112 112 112 112 pppp
77617161 119 097 113 097 waqa
7B227061 123 034 112 097 {"pa
3C21444F 060 033 068 079 <!DO
3C787364 060 120 115 100 <xsd
0A0A3C68 010 010 060 104 <h
3c48544d 060 072 084 077 <HTM
3C6F626A 060 111 098 106 <obj
00000000 000 000 000 000
0A0A0A0A 010 010 010 010

Lassen Sie uns ein Beispiel ausprobieren, das die Ausnahme java.io.StreamCorruptedException: ungültiger Stream-Header auslöst. Siehe Beispiel:

package delftstack;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.ClassNotFoundException;
import java.net.ServerSocket;
import java.net.Socket;

public class Example {
  private static ServerSocket Server_Socket;
  private static int Port_Number = 5000;

  public static void main(String args[]) throws IOException, ClassNotFoundException {
    Server_Socket = new ServerSocket(Port_Number);
    while (true) {
      System.out.println("Waiting for client request");
      // create socket and then wait for client connection
      Socket DemoSocket = Server_Socket.accept();
      // read from socket to the ObjectInputStream object
      ObjectInputStream Object_Input_Stream = new ObjectInputStream(DemoSocket.getInputStream());
      // convert the ObjectInputStream to the String
      String DemoMessage = (String) Object_Input_Stream.readObject();
      System.out.println("The Received Message is: " + DemoMessage);
      // ObjectOutputStream object
      ObjectOutputStream Object_Output_Stream =
          new ObjectOutputStream(DemoSocket.getOutputStream());
      // write object to the Socket
      Object_Output_Stream.writeObject("Hello Client " + DemoMessage);
      // close
      Object_Input_Stream.close();
      Object_Output_Stream.close();
      DemoSocket.close();
      // terminate the server on exit from the client
      if (DemoMessage.equalsIgnoreCase("exit"))
        break;
    }
    System.out.println("Shut down Socket server!!");
    // close the ServerSocket
    Server_Socket.close();
  }
}

Der obige Code versucht, eine vom Client gesendete Zeichenfolge zu lesen. Die Ausgabe für diesen Code ist die Ausnahme java.io.StreamCorruptedException: invalid stream header.

Siehe Ausgabe:

Exception in thread "main" java.io.StreamCorruptedException: invalid stream header: 54657374
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:803)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:298)
    at Example.main(SocketServerExample.java:29)

Der Grund für diese Ausnahme ist, dass wir die Daten nicht mit dem ObjectOutputStream senden, weil wir nicht erwarten können, dass der ObjectOutputStream Text automatisch in Objekte umwandelt; der hexadezimale Wert 54657374 wird als Text in Test umgewandelt, und wir müssen ihn direkt als Bytes senden.

Wir können die Methoden readObject() und writeObject() verwenden, um dieses Problem zu lösen.

Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

Verwandter Artikel - Java Exception