对象流序列号与反序列号
/* 序列化过程:将内存中的java对象保存到磁盘中或通过网络传输出去,使用ObjectOutputStream */ @Test public void test5() throws IOException { FileOutputStream fos = new FileOutputStream("hello.dat"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeUTF("java学习中"); oos.flush();//刷新操作 oos.writeObject(new Person("张三",20)); oos.flush(); oos.close(); } /* 反序列化:将磁盘文件中的对象还原为内存中的一个java对象 使用ObjectInputStream */ @Test public void test6() throws IOException, ClassNotFoundException { FileInputStream fis = new FileInputStream("hello.dat"); ObjectInputStream ois = new ObjectInputStream(fis); Object o = ois.readUTF(); Object o1 = ois.readObject(); String str = (String)o; System.out.println(str); System.out.println(o1); ois.close(); }
Person类序列化需要满足以下条件:
1.需要实现接口Serializable
2.当前类提供一个常量:serialVersionUID
3.除了当前Person类需要实现Serializable 接口之外,还必须保证其内部的所有属性也必须是可序列号的(默认情况下,基本数据类型可序列号)
ObjectOutputStream 、ObjectInputStream 不能序列化static和transient修饰的成员变量
public class Person implements Serializable { private static final long serialVersionUID = -68494470754667710L; private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } }