对象流--对象的序列化

1、对象是存在于内存中的(堆内存),有时候我们需要将对象保存在硬盘上,又有时我们需要将对象保存在另一台计算机上等等这样的操作,

这时候我们需要将对象转化为一个字节序列,而这个过程就是对象的序列化,相反我么又这样一个字节序列需要将其转化为对应的对象,

这个过程就是对象的反序列化。

2、对象-----序列化---字节序列

字节序列---反序列化---对象

3、使用OOS实现对象的序列化------ObjectOutputStream是用来对对象进行序列化的输出流,

其实现对象序列化的方法为:  -void  writeObject(Object  o)

该方法可以将给定的对象转化为一个字节序列后写出,

4、使用 OIS实现对象的反序列化---ObjectInputStream是用来对对象进行反序列化的输入流,

其实现对象反序列化打方法为: -Object  readObject()

该方法 可以从流中读取字节并转化为对象

5、Serialiable接口

ObjectOutputSream在对对象进行序列化时有一个要求,就是需要序列化的对象所属的类必须实现Serialiable接口,

实现该接口不需要实现任何方法,其只是作为可序列化的标志,

通常实现该接口的类,需要提供一个常量serialVersionUid,表名该类的版本,若不显示的声明,在对象序列化时也会根据当前类的各个方面计算该类的默认serialVersionUid,

但不同平台编译器实现有所不同,所以如果想跨平台,都应有显示的声明版本号。

6、Serialiable接口

如果声明的类的对象序列化存到硬盘上面,之后随着需求的变化更改了类的属性(增加或减少或更改)呢么反序列化时就会出现InvalidClassException,这样就会造成不兼

容问题,但当serialVersionUid相同时,它就会将不一样的field以type的预设值反序列化,可避免不兼容问题。

时间: 2024-08-07 17:00:33

对象流--对象的序列化的相关文章

Java文件与io——打印流和对象流

打印流的主要功能是用于输出,在整个IO包中打印流分为两种类型: 字节打印流:PrintStream 字符打印流:PrintWriter 打印流可以很方便的进行输出 public class PrintStreamDemo { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub byteStreamOut(); charStreamOut(); } //Pr

JAVA笔记12__字节、字符缓冲流/打印流/对象流/

/** * !!:以后写流的时候一定要加入缓冲!! * 对文件或其它目标频繁的读写操作,效率低,性能差. * 缓冲流:好处是能更高效地读写信息,原理是将数据先缓冲起来,然后一起写入或读取出来. * * BufferedInputStream:字节缓冲流(有一个内部缓冲区数组,用于缓冲数据) */ public class Main { public static void main(String[] args) { input(); output(); } /** * 使用字节缓冲流进行读取操作

Java IO详解(六)------序列化与反序列化(对象流)

File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html Java IO 流的分类介绍:http://www.cnblogs.com/ysocean/p/6854098.html Java IO 字节输入输出流:http://www.cnblogs.com/ysocean/p/6854541.html Java IO 字符输入输出流:https://i.cnblogs.com/EditPosts.aspx?postid=6859242 Jav

笔记:I/O流-对象序列化

Java 语言支持一种称为对象序列化(Object Serialization)的非常通用的机制,可以将任何对象写入到流中,并在之后将其读回,首先需要支持对象序列化的类,必须继承与 Serializable 接口,该接口没有任何方法,只是对类起到标记的作用,然后使用 ObjectOutputStream 流来序列化对象,使用 ObjectInputStream 流来反序列化,示例代码如下: 对象类声明: public class Employee implements Serializable

动车上的书摘-java对象流与序列化

动车上的书摘-java对象流与序列化 摘要: 摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢! 钢笔不限贵便宜,书法是来自心对手的交流.-泥沙砖瓦浆木匠 一.对象序列化 当需要存储相同类型的数据,选择固定的长度记录是好选择.但是在面向对象(OOP)程序中,对象之间很少有全部相同的类型.所以,java语言支持一种称为对象序列化(object serialization)的机制. 下面展示一个序列化例子,关于两个对象 Em

Java序列化与对象流浅谈

今晚又重新回顾了Java中序列化与对象流的知识,接触了一位有着上亿行有效代码量的大佬之思想,2333. 1.序列化与反序列化 Java中的序列化简而言之就是为了避免要重复使用的实例在每次执行程序过程中都要重新申请堆空间,序列化后直接加载,节约时间.序列化过程中,保存在文件中的对象只记录了对象的状态(属性),包括成员和类类型(名称),而不会存储对象的方法.可看做将一个有着灵魂的人进行灵魂转移,转移的只是他的记忆,他自己的各种行为,比如吃饭.睡觉--,每个人都拥有,且行为表现一样,即只需转移(保存)

【C#小知识】C#中一些易混淆概念总结(九)---------异常,文件流对象,.NET序列化,多线程

终于有时间来完成这个系列的最后一篇关于C#中异常,文件流对象,序列化,多线程问题的总结. 首先就来看关于异常的相关知识吧 一,异常 首先区分三个概念:警告,异常和错误.不管对于编程新手或者是老手对这三个概念都应该是非常熟悉,且是经常遇到的. 警告:在程序中出现,对于程序的执行没有影响. 异常:在运行的时候发生,一旦发生程序就会停止. 错误:一直是 指程序不符合语法规范. 在C#中的标准抛出异常的语句如下: try { //尝试执行的语句 } catch (Exception) { //抛出异常的

黑马程序员——Java基础——IO流(三)—对象的序列化(持久化),管道流,操作基本数据类型的流对象

第一讲 对象序列化(持久化) 概述: 将堆内存中的对象存入硬盘,以包括对象的数据,称为持久化或序列化 使用的类:ObjectInputStream和ObjectOutputStream 特有方法: ObjectInputStream Object readObject():读取 ObjectOutputStream void writeObject(obj):写入 1 /* 2 * 需求:将一个对象序列化,并从硬盘中读取序列化的对象 3 * 4 */ 5 import java.io.*; 6

[疯狂Java]I/O:I/O流的最高境界——对象流(序列化:手动序列化、自动序列化、引用序列化、版本)

1. 什么是对象流:序列化/反序列化的概念 1) 对象流是和字节流/字符流同处于一个概念体系的: a. 这么说字节流是流动的字节序列,字符流是流动的字符序列,那么对象流就是流动的对象序列咯? b. 概念上确实可以这样理解,对象流就是专门用来传输Java对象的: c. 但是字节和字符都是非常直观的二进制码(字节本身就是,而字符是一种二进制编码),二进制码的流动是符合计算机的概念模型的,可是对象是一个抽象的东西,对象怎么能像二进制码那样流动呢? d. 其实很好理解,对象流只不过是Java的API而已