序列化
- 什么是序列化
- 就是把java对象储存在某一地方(硬盘,网络),也就是将对象的内容
流化
- 两大类
- 序列化
- 将数据分解成字节流,一边存储在文件中或在网络上传输
- 反序列化
- 打开字节流并重构对象,对象序列化不仅要将基本数据类型转换成字节表示,有时还要恢复数据,
- 序列化
- 就是把java对象储存在某一地方(硬盘,网络),也就是将对象的内容
常用的序列化
如何进行序列化
让类实现Serializable接口
- 该接口是一个标志性的接口,标注该类可被序列
然后
使用输出流来构造一个对象输出流并通过writeObject(Object)方法
就可以将实现对象写出如果需要反序列化,则可以用一个输入流建立对象输入流,然后通过readObject方法从流中读取对象
代码
序列化User到本地
-
public void Test01() throws IOException { //获取文件的输出流inputStream //将这个对象输出 User user1 = new User(1,"PopDemo","1234567"); User user2 = new User(2,"yangfan","1234567"); User user3 = new User(3,"iu","1234567"); /** * 与这个文件的输出流进行绑定操作 * 我们利用这个对象的输出流,然后进行写一个操作 * 就可以实现对象的序列化的过程 * 建立管道 * 进行输出实体 */ ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("F:/pop.txt")); //讲类输出到管道内 oos.writeObject(user1); oos.writeObject(user2); oos.writeObject(user3); oos.flush(); oos.close(); System.out.println("数据已保存到本地,感谢您的使用"); } <!--0-->
-
transient 和 static 为什么不会被序列化的原因
transient static不会被序列化(IOException)
序列化保存的是对象的状态,静态变量数以类的状态,因此序列化并不保存静态变量。
这里的不能序列化的意思,是序列化信息中不包含这个静态成员域
但是还有一种情况会被序列化
- One
- 当我们实现Externalizable接口,则没有任何东西可以自动序列化,需要在writeExternal方法中进行手工指定所要序列化的变量,这与是否被transient修饰无关
- One