Java.IO.StreamCorruptedException: 잘못된 스트림 헤더
이 자습서는 Java의 java.io.StreamCorruptedException: 잘못된 스트림 헤더
예외를 수정하는 방법을 보여줍니다.
Java에서 java.io.StreamCorruptedException: 잘못된 스트림 헤더
java.io.StreamCorruptedException: 잘못된 스트림 헤더
는 상대적으로 일반적인 예외입니다. 이 예외의 이유를 이해하려면 예외에서 잘못된 스트림 헤더를 확인해야 합니다. 문제의 원인을 설명할 수 있기 때문입니다.
StreamCorruptedException
에는 두 개의 생성자가 있습니다. 첫 번째는 하나의 인수가 있고 다른 하나는 인수가 없습니다. 인수를 수락하는 사람은 예외에 대한 이유를 설명합니다.
java.io.StreamCorruptedException: 잘못된 스트림 헤더: XXXXXX
는 XXXXXX
가 잘못된 헤더 세부 정보를 나타내는 인수가 있는 예외입니다.
이 예외는 일반적으로 ObjectInputStream
으로 작업할 때 발생합니다. Javadoc
에 따라 java.io.Serializable
또는 java.io.Externalizable
을 지원하는 스트림에서 해당 객체만 읽을 수 있기 때문입니다.
따라서 ObjectInputStream
을 사용할 때마다 직렬화된 데이터와 함께 사용해야 합니다. 대부분의 StreamCorruptedException: 잘못된 스트림 헤더
는 텍스트, HTML, XML, JSON 등과 같은 파일이 직렬화 가능한 파일이 아닌 ObjectInputStream
생성자에 직접 전달될 때 발생합니다.
다음은 해당 ASCII 값과 함께 일반적으로 발생하는 java.io.StreamCorruptedException: 잘못된 스트림 헤더
입니다.
잘못된 스트림 헤더의 HEX 값 | HEX의 정수 | HEX의 ASCII 값 |
---|---|---|
54657374 | 084 101 115 116 | Test |
48656C6C | 072 101 108 108 | Hell |
54656D70 | 084 101 109 112 | Temp |
4920616D | 073 032 097 109 | “그래요” |
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 | 제곱 ~ |
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 |
java.io.StreamCorruptedException: 잘못된 스트림 헤더
예외를 발생시키는 예제를 시도해 보겠습니다. 예를 참조하십시오:
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();
}
}
위의 코드는 클라이언트에서 보낸 문자열을 읽으려고 합니다. 이 코드의 출력은 java.io.StreamCorruptedException: 잘못된 스트림 헤더
예외입니다.
출력 참조:
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)
이 예외의 이유는 ObjectOutputStream
이 자동으로 텍스트를 객체로 변환할 것으로 기대할 수 없기 때문에 ObjectOutputStream
을 사용하여 데이터를 전송하지 않기 때문입니다. 16진수 값 54657374
는 텍스트로 Test
로 변환되며 바이트로 직접 전송해야 합니다.
이 문제를 해결하기 위해 readObject()
및 writeObject()
메서드를 사용할 수 있습니다.
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