【Java】Java深入理解io篇(四) —数据流,对象流和序列化

【Java】Java深入理解io篇(四) —数据流,对象流和序列化

深入理解IO篇(如有错误,请各位大佬多多指正)
【Java】Java深入理解io篇(一)—全篇概览:https://blog.csdn.net/qq_45495857/article/details/110260909
【Java】Java深入理解io篇(二)—四大抽象类: https://blog.csdn.net/qq_45495857/article/details/110260984
【Java】Java深入理解io篇(三)—缓冲流和标准IO:https://blog.csdn.net/qq_45495857/article/details/110261113
【Java】Java深入理解io篇(四) —数据流,对象流和序列化:https://blog.csdn.net/qq_45495857/article/details/110261213

1.数据流:

数据流将“基本数据类型与字符串类型”作为数据源,从而允许程序以与机器无关的方式从底层输入输出流中操作Java基本数据类型与字符串类型

DataInputStream和DataOutputStream是处理流,可以对其他节点流或处理流进行包装,增加一些更灵活、更高效的功能。

注意:

使用数据流时,读取的顺序一定要与写入的顺序一致,否则不能正确读取数据

2.对象流

数据流只能实现对基本数据类型和字符串类型的读写,并不能读取对象(字符串除外),如果要对某个对象进行读写操作,我们需要学习一对新的处理流:

ObjectInputStream/ObjectOutputStream是以“对象”为数据源,但是必须将传输的对象进行序列化与反序列化操作

注意

  1. 对象流不仅可以读写对象,还可以读写基本数据类型。

  2. 使用对象流读写对象时,该对象必须序列化与反序列化。

  3. 系统提供的类(如Date等)已经实现了序列化接口,自定义类必须手动实现序列化接口。

序列化

当你创建对象时,只要你需要,他就会一致存在,但是程序终止时,无论如何他都不会继续存在,尽管这么做肯定是有意义的,但是仍旧存在某些情况,如果对象能够在程序不运行的情况下仍能存在并保存信息,那将非常有用。

把Java对象转换为字节序列的过程称为对象的序列化。把字节序列恢复为Java对象的过程称为对象的反序列化。

Java的对象序列化将那些实现了Serizlizable 接口的对象转换成一个字节序列,并能够在以后将这个字节序列完全恢复成原来的对象

可以利用对象的序列化实现“轻量级持久性”,“持久性”意味着一个对象的生命周期并不取决与程序是否执行,他可以生存与程序的调用之间

对象序列化的概念加入到语言中为了支持两种主要特性:

  1. Java的远程方法调用,它使存活于其他计算机上的对象使用起来就像是存活于本机上一样,当向远程对象发送消息时,需要通过对象序列化来传输参数和返回值
  2. 对于Java Beans来说,对象的序列化是必须的。使用一个bean时,一般情况下是在设计阶段对它的状态信息进行配置,这种状态信息必须保存下来,并在程序启动时进行后期恢复;这种具体的工作是由对象序列化完成的

对象序列化特别“聪明”的一个地方是它不仅保存了对象的全景图,而且能追踪对象内所包含的所有引用,并保存那些对象,接着又能对对象内包含的每个这样的引用进行追踪,依次类推。这种情况有时被成为“对象网”

注意

  1. static属性不参与序列化。

  2. 对象中的某些属性如果不想被序列化,不能使用static,而是使用transient修饰。

  3. 为了防止读和写的序列化ID不一致,一般指定一个固定的序列化ID。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GengMS_DEV

你的鼓励就是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值