Java序列化是一种将对象转换为字节流的过程,以便将其持久化到磁盘或通过网络传输,反序列化则是将字节流转换回对象的过程,在Java中,可以通过实现java.io.Serializable
接口来实现对象的序列化和反序列化。
序列化
1、实现Serializable
接口
要使一个类的对象可以被序列化,需要实现java.io.Serializable
接口。
import java.io.Serializable; public class Person implements Serializable { private static final long serialVersionUID = 1L; private String name; private int age; // 构造方法、getter和setter方法省略 }
2、使用ObjectOutputStream
进行序列化
要将对象序列化为字节流,可以使用java.io.ObjectOutputStream
类。
import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.io.Serializable; public class SerializeDemo { public static void main(String[] args) { Person person = new Person("张三", 30); try { FileOutputStream fileOut = new FileOutputStream("person.ser"); ObjectOutputStream out = new ObjectOutputStream(fileOut); out.writeObject(person); out.close(); fileOut.close(); System.out.println("序列化成功,已保存到person.ser文件"); } catch (IOException i) { i.printStackTrace(); } } }
反序列化
1、使用ObjectInputStream
进行反序列化
要将字节流反序列化为对象,可以使用java.io.ObjectInputStream
类。
import java.io.FileInputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.Serializable; public class DeserializeDemo { public static void main(String[] args) { Person person = null; try { FileInputStream fileIn = new FileInputStream("person.ser"); ObjectInputStream in = new ObjectInputStream(fileIn); person = (Person) in.readObject(); in.close(); fileIn.close(); } catch (IOException i) { i.printStackTrace(); return; } catch (ClassNotFoundException c) { System.out.println("Person类未找到"); c.printStackTrace(); return; } System.out.println("反序列化成功,从person.ser文件中读取到的对象为:"); System.out.println("姓名:" + person.getName()); System.out.println("年龄:" + person.getAge()); } }
注意:在进行反序列化操作时,需要确保字节流中的类与当前运行的类具有相同的类名、包名和实现的接口,如果这些信息不匹配,将抛出ClassNotFoundException
异常。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/642901.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复