对象的序列化和反序列化目录
ObjectOutputStream和ObjectInputStream
文章目录
- 对象的序列化和反序列化目录
- 前言
- 一、对象的序列化和反序列化是什么?
- 对象的序列化和反序列化
- 为什么会报错?
- 读取:反序列
- 总结
前言
序列:就是排队的意思,
对象序列化即把对象转为字节序列,序列化的过程
对象的序列化和反序列化:ObjectOutputStream和ObjectInputStream
ObjectOutputStream:用于输出对象,把对象转成字节数据输出
一、对象的序列化和反序列化是什么?
对象的序列化和反序列化
ObjectOutputStream:用于输出对象,把对象转成字节数据输出,对象的输出过程称为序列化。
ObjectOutputStream比OutputStream多了很多方法,其中一个是 writeObject(obj)
如果这段代码是一个对象
再举个更直观的例子 创建一个user类
我们现在不是想写一段一段文字,
而是直接把对象写进去
怎么写
ObjectOutputStream:用于输出对象,把对象转成字节数据输出,对象的输出过程称为序列化。
ObjectOutputStream比OutputStream多了很多方法,其中一个是 writeObject(obj)
报这个错误怎么解决?
为什么会报错?
如果没有实现Serializable接口的类型(即上图的u对象)
在序列化时,报错误NotSerializableException,不能序列化
要解决,User类必须要实现java.io.Serializable接口
【理解】就像护照,你有护照就是合法出入境,没有护照就是偷渡
实现这个接口就行了
完成以后我们看一下效果,似乎是乱糟糟的,只能看到一点影子
即返回的是整个对象的所有信息
只能将支持 java.io.Serializable 接口的对象写入流中。每个 serializable 对象的类都被编码,编码内容包括类名和类签名、对象的字段值和数组值,以及从初始对象中引用的其他所有对象的闭包。
writeObject 方法用于将对象写入流中。所有对象(包括 String 和数组)都可以通过 writeObject 写入。可将多个对象或基元写入流中。必须使用与写入对象时相同的类型和顺序从相应 ObjectInputstream 中读回对象。
读取:反序列
现在我们读取一下,要注意的是这个对象也只能java程序去读,别的程序是不能读取的
读取的过程就叫反序列化
ObjectInputstream:用于输入对象,把字节序列转为对象读取,对象的读取过程称为反序列化。
ObjectInputstream比InputStream多了很多方法,其中一个是 Object readObject()
总结
1、 ObjectOutputStream:用于输出对象,把对象转成字节数据输出,对象的输出过程称为序列化。
ObjectOutputStream比OutputStream多了很多方法,其中一个是 writeObject(obj)
2、 ObjectInputstream:用于输入对象,把字节序列转为对象读取,对象的读取过程称为反序列化。
ObjectInputstream比InputStream多了很多方法,其中一个是 Object readObject()