前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java 读写二进制数据与java序列化

java 读写二进制数据与java序列化

作者头像
用户2436820
发布2018-09-05 10:31:43
1.8K0
发布2018-09-05 10:31:43
举报
文章被收录于专栏:奔跑的蛙牛技术博客

DataOutput 接口定义如下几种方式已二进制格式读写数据

方法

从文件中读取二进制数据

DataOutputSream out = new DataOutputStream(new FileInputSream("xx.dat"))

随机访问文件

RandomAccessFile类可以在文件中的任何位置查找或写入数据

zip文档

zip文档以压缩格式存储一个和多个文件,每个ZIP文件都有一个头,包含每个文件的名字和压缩方法等信息

对象流与序列化

需要存储相同类型的数据,使用固定长度存储是一个不错的选择

java 语言支持对象序列化的通用机制,可以将任何对象写入到流当中,并在之后将其读回 为了保存对象数据,首先需要打开一个ObjectOutputStrem对象

代码语言:javascript
复制
  ObjectOutStream out = new ObjectOutputStream(new FileOutputStream("employee.dat"))
// 保存对象数据
Employee harry = new Employee("Harry Hacker",50000,1989,10,1);
Manager boss = new Manager("Carl Cracker",80000,1987,12,15);
out.writeObject(harry);
out.writeObject(boss);
// 读回对象数据
ObjectInputStream in = new ObjectInputStream(new FileInputStream("employee.dat"));
// 然后用 readObject方法以这些对象写入的顺序获得他们
Employee e1 = (Emloyee) in.readObject();
Employee e2 = (Employee) in.readObject();
// 如果希望在对象流中存储或者恢复所有的类都应进行一下修改,这些类必须实现Serializable接口
class Employee implements Serializable { ... }

这里再讲解一下序列化

一个类只有实现Serializable接口才能被序列化

什么是序列化:将对象的状态信息转换为可以传输和存储的过程,想对象此时的状态信息写出临时缓冲区或者永久缓冲区,日后需要的时候再转化为对象,重新使用

Serializable主要用来支持两种主要的特性:

  1. Java的RMI(remote method invocation),RMI允许像在本机上一样操作远程机器上的对象,当发送消息给远程对象时,就需要用到序列化机制来发送参数和接受返回值
  2. Java的JavaBean,Bean的状态信息通常是在设计时配置的,Bean的状态信息必须被保存下来,以便当程序运行时能恢复这些状态信息,这也需要序Serializable机制

这个图片serializable的相关知识点和用途

重点

不了解的话请查阅或者@我

如果一个普通员工是两个经理的秘书,这种共享对象该如何存储

共享秘书

下面是相关算法

  • 对遇到的每一个对象都关联一个序列号
  • 对于每个对象,第一次遇到时都把它保存到对象数据流中
  • 如果对象之前被保存过,那么只写出“与之前保存过的序列号为x的对象相同”
  • 对于流中的对象,在第一次遇到其序列号时,构建它,并使用流中的数据初始化它,然后记录这个新序号和对象之间的关联
  • 当遇到 “保存过的序列号为x的对象相同”,获取这个顺序号相关联的对象引用

具体实现结果 查看代码

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.08.11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • DataOutput 接口定义如下几种方式已二进制格式读写数据
  • 随机访问文件
  • zip文档
  • 对象流与序列化
    • 这里再讲解一下序列化
    • 这个图片serializable的相关知识点和用途
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档