用非常硬核的JAVA序列化手段实现对象流的持久化保存
背景
在OOP(面向对象编程)中处处是对象,我们当然希望可以有一种数据格式来存储这种对象的集合,以实现持久化。比如部门类所形成的部门对象集合,员工类所形成的员工对象集合,甚至是这样一个类所形成的对象:公司中有多个部门,每个部门有多个员工,我们希望将这样一个对象以文件的方式实现持久化保存。
对象流的概念
为实现对象的持久化保存,我们需要引入Java语言的对象序列化(object serialization)机制,这种机制可以将任何对象输出到流中:比如
对象流实例
引入一张组织结构图
定义组织架构图的类
公司:代表了组织架构的外在存在;公司是由部门和职员组成的一个完整实体。部门:代表了组织架构中的运作单位;部门按类型不同可以分为不同的业务部门。职员:代表了组织架构中的最小单位;职员按职位不同存在于不同的业务部门。
类的完整结构
用对象流保存组织架构的对象信息
有了类及构造函数完成对象的初始化过程,我们就具备了建立整个组织架构的能力,接下来我们完整地建立一个公司的组织架构:
核心代码
通过对象流的方式建立一个company.dat文件将公司对象写入文件将公司对象中的部门列表集合写入文件遍历部门列表,将每个部门下的职员列表集合写入文件
生成的文件如下:
二进制信息:
用对象流读取文件并输出
核心代码
通过对象流的方式获取company.dat文件读取对象信息
输出如下:
总结
在本文中,我们使用序列化将对象集合保存到磁盘文件中,并按照它们被存储的样子获取它们,我们学习到了如下信息:
ObjectOutputStream(OutputStream out) 创建一个ObjectOutputStream使得你可以将对象写出到指定的OutputStream。void writeObject(Object obj) 写出指定的对象到ObjectOutputStream,这个方法将存储指定对象的类、类的签名以及这个类及其超类中所有非静态和非瞬时的域的值。ObjectInputStream(InputStream in) 创建一个ObjectInputStream用于从指定的InputStream中读回对象信息。Object readObject()从ObjectInputStream中读入一个对象。特别是,这个方法会读回对象的类、类的签名以及这个类及其超类中所有非静态和非瞬时的域的值。它执行的反序列化允许恢复多个对象引用。想了解更多精彩内容,快来关注计算机java编程