ObjectInputStream和OjbectOutputSteam
    用于存储和读取基本数据类型数据或对象的处理流。它的强大之处就是可以把Java中的对象写入到数据源中,也能把对象从数据源中还原回来。
    序列化:用ObjectOutputStream类 保存基本类型数据或对象的机制 (数据转为二进制流)
    反序列化:用ObjectInputStream类 读取基本类型数据或对象的机制 (二进制流还原为数据)
    ObjectOutputStream和ObjectInputStream不能序列化static和transient修饰的成员变量
    序列化的好处:
    1、序列化的好处在于可将任何实现了Serializable接口的对象转化为字节数据,提高存储的效率和传输的性能,使其在保存和传输时可被还原(反序列化)。
    2、实现了Serializable 接口的对象,可将它们转换成一系列字节,并可在以后完全恢复回原来的样子。 这一过程亦可通过网络进行。这意味着序列化机制能自动补偿操作系统间的差异。再换句话说,可以先在Windows 机器上创台 建一个对象,对其序列化,然后通过网络发给一台Unix 机器,然后在那里准确无误地重新“装配”。不必关心数据在不同机器上如何表示,也不必关心字节的顺序或者其他任何细节

    对象流的写入和写出
    **public static void **main(String[] args) {<br /> {<br /> **try **{<br /> _//对象流的写入<br />// ObjectOutputStream object = new ObjectOutputStream(new FileOutputStream("./a.data"));<br />// object.writeObject(10);<br />// object.writeObject("张三");<br /> //对象流的写出<br /> _ObjectInputStream in=**new **ObjectInputStream((**new **FileInputStream(**"./a.data"**)));<br /> Object object=in.readObject();<br /> Object object1=in.readObject();<br /> System.**_out_**.println(object+**":"**+object1);<br /> } **catch **(IOException e) {<br /> e.printStackTrace();<br /> } **catch **(ClassNotFoundException e) {<br /> e.printStackTrace();<br /> }<br /> }<br /> }

    序列化与反序列化
    **public static void **main(String[] args) {<br /> **try **{
    `_//序列化
    // ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream(“./User.data”));
    // User u=new User();
    // u.setName(“张三”);
    // u.setAge(9);
    // u.setNum(001);
    // out.writeObject(u);

    1. //反序列化<br /> _ObjectInputStream in=**new **ObjectInputStream(**new **FileInputStream(**"./User.data"**));<br /> User u=(User)in.readObject();<br /> System.**_out_**.println(u.getNum()+**","**+u.getName()+**","**+u.getAge());<br /> } **catch **(IOException e) {<br /> e.printStackTrace();<br /> } **catch **(ClassNotFoundException e) {<br /> e.printStackTrace();<br /> }
    2. }`

    [

    ](https://blog.csdn.net/zhixingwu/article/details/103225901)