上次面试的时候 ,如何实现java 类的序列化,当时感觉这个问题很简单,我的回答是实现serizlizable 接口就好了,可以实现对象的持久化,看了看书,原来这样:
public class Serialize implements Serializable{ /** * java 序列化 详解 */ private static final long serialVersionUID = 1L; private int num = 1390; public static void main(String[] args) { try { FileOutputStream fileOutputStream = new FileOutputStream("d:/serialize.dat"); ObjectOutputStream oos = new ObjectOutputStream(fileOutputStream); Serialize s = new Serialize(); oos.writeObject(s); oos.flush(); oos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
以上代码是输出实现了序列化的类到文件里,原来里面是这样的: 第一部分就是序列化的开头:AC ED : 声明使用了序列化协议 。 00 05: 序列化协议版本。73: 声明这是一个新的对象。第二部分是要序列化的类的描述,在这里是serialize类72 : 声明这里开始一个新的class00 17 : Class 名字的长度是17个字节。63...65 完整类名。第三部分: 属性描述第四部分: 父类描述第五部分:属性项目的实际值00 06 6E 则为1390的数值。 当父类继承Serializable 接口时,所有子类都 可以被序列化。如果子类实现了,父类没有实现,父类中的属性不能序列化,不会报错,但数据会丢失。如果序列化的属性是对象,这个对象也必须实现Serializable接口,否则会报错。在序列化时,如果seralVersionUID被修改,那么反序列化时会失败。
java 序列化原来如此
时间: 2024-10-24 11:49:49