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 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 FacebookVerwandter Artikel - Java Exception
- Ausnahme bei ungültiger Eingabe in Java
- Ausnahme im Hauptthread Java.Util.NoSuchElementException: Keine Zeile gefunden
- Ausnahme im Thread AWT-EventQueue-0 java.lang.NullPointerException
- Beheben Sie die Java.Net.BindException: Adresse wird bereits verwendet: Bind
- Der Java-Gateway-Prozess wurde beendet, bevor seine Portnummer gesendet wurde
- Java Throwable vs. Ausnahmeklasse