序列化和反序列化

序列化和反序列化

一、定义:什么是序列化?什么是反序列化?
         序列化:把java对象转化为字节序列的过程
         反序列化:把字节序列恢复为java对象的过程
二、作用
        (1)把对象的字节序列永远保存在磁盘上。(持久化对象)
        (2)可以将java对象以字节序列的方式在网络传输。(网络传输对象)
三、如何实现
         对象必须实现Serializable或Externalizable接口中的一个
 
         如果对序列化的需求非常简单,没有对序列化过程控制的需求,可以简单实现Serializable接口即可

   代码:创建一个类,实现Serializable接口

         import java.io.Serializable;
         public class Person implements Serializable{

                // 阻止成员变量序列化  transient 例:private transient int age;  age变不能被序列化

              private String name;
              private int age;
              //构造有参函数
              public Person(String name,int age){
                   this.name=name;
                   this.age=age;
            }
              public String getName() {
        return name;
        }
          public void setName(String name) {
        this.name = name;
        }
          public int getAge() {
        return age;
        }
          public void setAge(int age) {
        this.age = age;
        }
              
          @Override
          public String toString() {
        return "Demo1Person [name=" + name + ", age=" + age + "]";
            }
         }
        //对对象进行序列化
       public class Demo1ObjectStream{
           public static void main(String[] args) throws Exception{
              //创建字节输出流对象,并绑定目的地
              FileOutputStream fos=new FileOutputStream("d:\Object.txt");
              //创建写出对象的序列化流的对象 构造方法传递字节输出流
              ObjectOutputStream oos=new ObjectOutputStream(fos);
              Person p=new Person("徐凤年",25);
              //writeObject() 写
              oos.writeObject(p);
              oos.close()
           }    
        }
        //反序列化 将文件中的序列化字符转化为对象
      public class Demo2ObjectStream{
          public static void main(String[] args) throws Exception{
             FileInputStream fis=new FileInputStream("d:\Object.txt");
             //创建反序列化流     readObject()  读对象
             ObjectInputStream ois=new ObjectInputStream(fis);
             Object ob=ois.readObject();
             System.out.println(ob);
             ois.close();
         }
      }