package FileT.Day6;
import java.io.*;
/**
* 序列化流与反序列化流
* 序列化需要类实现Serializable接口
* 如果没有显式声明序列化id,当类的对象被序列化后,如果类发生变化,那么在反序列化对象的时候就会报错,因为版本id不一致。
* 如果显式声明了序列化id,则当类的对象被序列化后,即便类发生变化也不会影响反序列化,因为id没有变。
* 显式声明id需要为static final long serialVersionUID。
* 如果某个字段不想被序列化,可以加关键字transient.
*/
public class XLHTest {
public static void main(String[] args) throws IOException, ClassNotFoundException {
write();
read();
}
public static void write() throws IOException {
ObjectOutputStream oos =new ObjectOutputStream(new FileOutputStream("fox.txt"));
s s1 =new s(21,"QQ");
oos.writeObject(s1);
oos.close();
}
public static void read() throws IOException, ClassNotFoundException {
ObjectInputStream ois =new ObjectInputStream(new FileInputStream("fox.txt"));
Object o = ois.readObject();
s ss =(s)o;
System.out.println(ss.toString());
ois.close();
}
}
class s implements Serializable {
private static final long serialVersionUID =42l;
transient int age;
String name;
public s() {
}
public s(int age, String name) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "s{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
序列化流和反序列化流
最新推荐文章于 2023-08-25 15:21:29 发布
这篇博客探讨了Java中的序列化与反序列化流程,强调了实现Serializable接口的重要性。作者指出,未显式声明serialVersionUID时,类变化可能导致反序列化错误,而显式声明则能确保版本一致性。此外,使用transient关键字可以阻止字段被序列化。博客通过实例展示了如何使用ObjectOutputStream和ObjectInputStream进行操作。
摘要由CSDN通过智能技术生成