对象流序列号与反序列号
/*
序列化过程:将内存中的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 +
'}';
}
}

浙公网安备 33010602011771号