Java序列化与反序列化是两个相反的过程,它们在数据传输和存储方面起着关键作用。下面是它们之间的主要区别:
java.io.Serializable接口标记要序列化的类。ObjectOutputStream的writeObject()方法将对象写入输出流。Serializable接口的对象才能被序列化。transient关键字修饰)不会被序列化。import java.io.*;
public class SerializationExample {
public static void main(String[] args) {
try {
FileOutputStream fileOut = new FileOutputStream("object.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
MyClass obj = new MyClass();
out.writeObject(obj);
out.close();
fileOut.close();
System.out.printf("Serialized data is saved in object.ser");
} catch (IOException i) {
i.printStackTrace();
}
}
}
class MyClass implements Serializable {
private String name;
private int age;
// getters and setters
}
java.io.ObjectInputStream的readObject()方法从输入流中读取对象。ClassNotFoundException或InvalidClassException。import java.io.*;
public class DeserializationExample {
public static void main(String[] args) {
MyClass obj = null;
try {
FileInputStream fileIn = new FileInputStream("object.ser");
ObjectInputStream in = new ObjectInputStream(fileIn);
obj = (MyClass) in.readObject();
in.close();
fileIn.close();
} catch (IOException i) {
i.printStackTrace();
return;
} catch (ClassNotFoundException c) {
System.out.println("MyClass class not found");
c.printStackTrace();
return;
}
System.out.println("Deserialized MyClass...");
System.out.println("Name: " + obj.getName());
System.out.println("Age: " + obj.getAge());
}
}
这两个过程在Java中通常成对出现,用于实现对象的持久化和网络通信等功能。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。