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);
//反序列化<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 /> }
}`
[
](https://blog.csdn.net/zhixingwu/article/details/103225901)