📅  最后修改于: 2023-12-03 15:16:37.005000             🧑  作者: Mango
StreamCorruptedException
是Java中一个异常类,指示从流中读取的字节流无效或损坏。该异常通常在对象序列化和反序列化过程中发生。在序列化过程中,可以使用ObjectOutputStream
将对象写入输出流,而在反序列化过程中,则可以使用ObjectInputStream
读取输入流中的对象。
当Java虚拟机检测到字节流无效或损坏时,会抛出StreamCorruptedException
异常。其中包含以下信息:
StreamCorruptedException
Invalid type code: XX
以下是导致StreamCorruptedException
异常的常见场景和原因:
StreamCorruptedException
异常。StreamCorruptedException
异常。StreamCorruptedException
异常。以下是解决StreamCorruptedException
异常的常见方法:
Serializable
接口的readObject()
和writeObject()
方法,自定义对象的序列化和反序列化逻辑,避免出现StreamCorruptedException
异常。以下是一个触发StreamCorruptedException
异常的示例代码:
import java.io.*;
public class Main {
public static void main(String[] args) {
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bos);
out.writeInt(123);
out.close();
byte[] bytes = bos.toByteArray();
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ObjectInputStream in = new ObjectInputStream(bis);
String str = (String) in.readObject(); // 触发StreamCorruptedException异常
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
在这个例子中,我们向ObjectOutputStream
中写入一个整数,然后将其序列化到字节数组中。接着,我们将字节数组反序列化为ObjectInputStream
,尝试读取一个字符串对象。因为序列化期间没有写入任何字符串对象,所以尝试将其还原为字符串对象时,将会导致StreamCorruptedException
异常。