📅  最后修改于: 2023-12-03 14:43:02.702000             🧑  作者: Mango
在Java中,Serilization是一种将对象转换为字节流的过程,以便可以将其保存到磁盘或通过网络传输。然而,并非所有类都可以序列化,如果不能序列化,便会抛出NotSerializableException
异常。下面是一个示例程序:
import java.io.*;
class NotSerializable implements Serializable {
private static final long serialVersionUID = 1L;
private NonSerializable ns = new NonSerializable();
}
class NonSerializable {
}
public class SerializationTest {
public static void main(String [] args) {
try {
NotSerializable nsObj = new NotSerializable();
FileOutputStream fileOut = new FileOutputStream("notSerializable.txt");
ObjectOutputStream objectOut = new ObjectOutputStream(fileOut);
objectOut.writeObject(nsObj);
objectOut.close();
fileOut.close();
System.out.println("NotSerializable object is serialized successfully");
}catch(IOException ioe) {
ioe.printStackTrace();
}
}
}
在上面的代码中,我们定义了一个类NotSerializable
,它包含一个非序列化的成员变量NonSerializable
。接下来,我们尝试将NotSerializable
实例序列化,并将其保存到文件中。
如果我们运行上面的程序,会看到以下输出:
java.io.NotSerializableException: com.example.NonSerializable
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at SerializationTest.main(SerializationTest.java:15)
这是因为NonSerializable
类不是可序列化的,无法转换为字节流。因此,Java抛出了一个NotSerializableException
异常。
要解决此问题,我们需要把NonSerializable
类也标记为可序列化。例如:
class NonSerializable implements Serializable {
}
现在,当我们重新运行程序时,便不会再出现NotSerializableException
异常了,因为所有成员变量都是可序列化的。
总之,NotSerializableException
异常通常在Java序列化期间出现,而且常常是由于某个类或成员变量未实现Serializable接口引起的。解决此问题的方法是将所有需要序列化的类和成员变量都标记为可序列化。