官方解释:

ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream。可以使用 ObjectInputStream 读取(重构)对象。通过使用流中的文件可以实现对象的持久存储。如果流是网络套接字流,则可以在另一台主机上或另一个进程中重构对象。

只能将支持 java.io.Serializable 接口的对象写入流中。每个 serializable 对象的类都被编码,编码内容包括类名和类签名、对象的字段值和数组值,以及从初始对象中引用的其他所有对象的闭包。

ObjectInputStream 对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化。

ObjectOutputStream 和 ObjectInputStream 分别与 FileOutputStream 和 FileInputStream 一起使用时,可以为应用程序提供对对象图形的持久性存储。ObjectInputStream 用于恢复那些以前序列化的对象。其他用途包括使用套接字流在主机之间传递对象,或者用于编组和解组远程通信系统中的实参和形参。

ObjectInputStream 确保从流创建的图形中所有对象的类型与 Java 虚拟机中的显示的类相匹配。使用标准机制按需加载类。

只有支持 java.io.Serializable 或 java.io.Externalizable 接口的对象才能从流读取。

readObject 方法用于从流读取对象。应该使用 Java 的安全强制转换来获取所需的类型。在 Java 中,字符串和数组都是对象,所以在序列化期间将其视为对象。读取时,需要将其强制转换为期望的类型。

概括为 ObjectInputStream和ObjectInputStream类创建的对象被称为对象输入流和对象输出流。

知识储备:

使用对象流写入或读入对象时,要保证对象是序列化的。这是为了保证能把对象写入到文件,并能再把对象读回到程序中的缘故。一个类如果实现了Serializable接口,那么这个类创建的对象就是所谓序列化的对象。所谓“对象序列化”: 简 单一句话:使用它可以象存储文本或者数字一样简单的存储对象。一个应用是,程序在执行过程中突然遇到短电或者其他的故障导致程序终止,那么对象当前的工作 状态也就会丢失,这对于有些应用来说是可怕的。用对象序列化就可以解决这个问题,因为它可以将对象的全部内容保存于磁盘的文件,这样对象执行状态也就被存 储了,到需要时还可以将其从文件中按原样再读取出来,这样就解决了数据丢失问题。对象序列化可以简单这么实现:为需要被序列化的对象实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流

ObjectInputStream和ObjectOutputStream是2个处理流,属于包装类,用于封装其他的流对象,为被封装的流对象提供额外的功能。它们可以从底层输入流中读取对象类型的数据和将对象类型的数据写入到底层输出流。

将对象中所有成员变量的取值保存起来就等于保存了该对象,将对象中所有成员变量的取值还原就相等于读取了该对象。
ObjectInputStream和ObjectOutputStream类所读写的对象必须实现了Serializable接口,这牵扯到了对象的序列化问题,请参考其他资料了解对象的序列化。

将ObjetInputStream、ObjectOutputStream和FileInputStream、FileOutputStream结合使
用,可以将对象信息存储在磁盘上,完成对象的持久化存储。也可以通过ObjectOutputStream向网路中写对象类型的数据,并通过
ObjectInputStream从网络中读取对象类型的信息。

从ObjectInputStream中读取数据的顺序必须与向ObjectOutputStream中写入数据的顺序相同,否则无法读取到正确的数据。

最新文章

  1. nodejs 安装
  2. hive 调优总结
  3. Javascript:Javascript数据类型详解
  4. VIM操作常用指令(转)
  5. 【Java】JDBC连接数据库
  6. Hadoop多硬盘配置时的注意事项
  7. tomcat端口被占用
  8. SQL 中逻辑运算符的优先级
  9. 指针强转和void*
  10. node系列4
  11. mongodb一些特性
  12. 【点击模型学习笔记】Predicting Clicks_Estimating the Click-Through Rate for New Ads_MS_www2007
  13. 解决eclipse中maven出现的Failure to transfer XXX.jar的问题
  14. webpack打包编译时,不识别src目录以外的js或css
  15. C# out ref 用法总结
  16. EasyExcel导入工具(SpringMVC下使用)
  17. [Bayes] qgamma & rgamma: Central Credible Interval
  18. geoserver 常见问题笔记
  19. C#微信小程序服务端获取用户解密信息
  20. Windows Server 2012 R2 创建AD域

热门文章

  1. Linux下多路径multipath配置
  2. arm v5,v6,v7?
  3. iOS一些关于日历的问题
  4. 【OC基础语法考试】
  5. ABP框架详解(八)动态ApiController的生成和访问机制
  6. html中使用js+table 实现分页
  7. 关于CAP定理的个人理解
  8. UWP?UWP! - Build 2015有些啥?(1)
  9. 今天心情好,一起探讨下《送给大家的200兆SVN代码服务器》怎么管理我们的VS代码?
  10. 如何基于纯GDI实现alpha通道的矢量和文字绘制