java中的序列化和反序列化
1、序列化和反序列化 什么是序列化? 将数据结构转换为字节的过程 什么是反序列化? 将字节转换为数据结构的过程
如果想使用序列化和反序列化就要通过 OOS 和 OIS 序列化和反序列化必须要使用一个接口 java.io.Serializable; 实现该接口之后,还需要给该需要序列化的类提供一个类的版本号,这个类的 版本号分厂重要,他影响着反序列化是否成功。

2、 反序列化的时候,他会先查看版本号和序列化的时候是否一致,如果不一致 直接抛出异常,如果一致那么他会启动兼容模式,序列化的时候 没有的属性, 在反序列的时候会使用默认值来代替。

3、 流是不是输出还是输入,相对的参照物是内存 如果将一个文本文件的内容输入到控制台显示,首先需要 将该文件的内容读取到内容,然后输出到控制台 (输入流)

4、public class Person implements Serializable{
/** * 序列化的版本号 * 该版本号很重要 他影响着反序列化是否能够成功 */ private static final long serialVersionUID = 1L; private String name; private Integer age; private Double salary; private String address; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Double getSalary() { return salary; } public void setSalary(Double salary) { this.salary = salary; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", salary=" + salary +",address="+address+"]"; }}

5、import java.io.FileOutputStream;import java.io.ObjectOutputStream;
/** * 序列化 * 将数据结构---->字节 * * ObjectOutputStream 高级流 * */public class OOSDemo { public static void main(String[] args) throws Exception{ Person p=new Person(); p.setName("张三丰"); p.setAge(22); /** * Double Integer 是兄弟关系 * 他们只能和自己相对应的基本类型做自动拆箱操作 * 2个包装类型和基本类型不一样,不能够自动转换。 */ p.setSalary(6000.0); FileOutputStream fos=new FileOutputStream("Person.obj"); ObjectOutputStream oos=new ObjectOutputStream(fos); oos.writeObject(p); oos.close(); }}

6、import java.io.FileInputStream;import java.io.ObjectInputStream;/** * 反序列化 * 将字节--->数据结构 */public class OISDemo { public static void main(String[] args) throws Exception{ FileInputStream fis=new FileInputStream("Person.obj"); ObjectInputStream ois=new ObjectInputStream(fis); Person p=(Person)ois.readObject(); System.out.println(p); ois.close(); }}
