IO-对象实例化
来源:互联网 发布:java 高斯扩散模型 编辑:程序博客网 时间:2024/05/17 00:51
一,本章目标
①掌握对象序列化的作用
②掌握Serializable接口的作用
③可以使用ObjectOutputStream进行对象序列化操作
④可以使用ObjectInputStream进行对象的反序列化操作
⑤整我Externalizable接口的作用及Serializable接口的实现区别
⑥掌握transient关键字的作用
⑦可以序列化一组对象
二,具体内容
2.1 什么叫对象序列化?
一个对象产生之后,实际上是在内存中为其开辟了一个存贮控件,方便存贮信息。
一个类不能平白无故地被序列化。这个接口中没有任何一个方法,此接口表示一个标识接口,表示其具备了某种功能。实例如下:
此类实现了Serializable接口,表示这个类可以被序列化了,变成二进制byte流。
但是在进行序列化和反序列化操作的时候,对于不同的jdk版本,实际上会出现版本的兼容问题。
2.2 对象的序列化和反序列化
ObjectOutputStream:
到底序列化了哪些东西?所有的对象拥有各自的属性值,但是所有的方法都是公共的,所以序列化对象的时候实际上序列化就是属性。
反序列化:ObjectInputStream:
问题:如果一个类实现了Serializable接口,则肯定此类可以被序列化,那么也就意味多了一项功能,可以被序列化,那么是不是所有类都实现此接口是不是更好?
因为JDK是不断升级的,现在Serializable接口还没有定义,如果以后有定义了呢?那么所有类都要改变。
2.3 Externalizable接口
使用此接口可以方便的序列化一个对象,但是在序列化操作中也提供了另外一种序列化机制---Externalizable。
次接口继承了Serializable接口。
方法:
①写入:void writeExternal(ObjectOutput out)throws IOException
②读取:void readExternal(ObjectInput in)throws IOException,ClassNotFoundException
利用此接口修改之前的程序:
以上的程序没有任何问题,但是它出现了一个错误,在使用Exteterlizable的接口的时候需要在被序列化的类中定义一个无参构造,因为此接口在镜像反序列化的时候,
会先使用类中的无参构造方法为其实例化,之后再将读取的内容分别设置到属性之中。
在开发中,使用Serializable接口是使用得最多的
2.4transient关键字
在序列化操作的时候,如果某个属性不希望被序列化下来,则可以直接使用这个关键字声明。
transient+Serializable接口可以完全取代Externalizable接口的功能。
2.5序列化一组对象。
三,总结
1.对象的序列化作用,对象序列化并不一定向文件保存,也有可能面向于其他输出
2.被序列化对象的类必须实现Serializable接口,如果某个属性那个被序列化,则可以使勇transient关键字声明
3.ObjectOutputStream序列化对象,ObjectInputStream 对象
4.Externalizable接口:实现手工序列化对象
5.使用序列化对象保存一组对像的时候要使用对象数组的形式操作
- IO-对象实例化
- IO实例
- io之对象序列化
- 实例化类对象
- FromHandle 实例化对象
- 实例化 泛型 对象
- 对象推迟实例化
- reflect实例化对象
- 对象实例化过程
- java实例化对象
- PHP实例化对象
- 对象实例化过程
- javascript对象实例化
- 如何实例化对象
- 对象实例化过程
- 实例化对象
- Java IO流与对象IO序列化
- Java IO流与对象IO序列化
- echarts loading加载页&工具栏
- Csharp进阶:文件流之FileInfo类
- iOS 中storyBoard的简单使用
- redis-benchmark压力测试
- 网易云通信安卓 Demo 结构说明
- IO-对象实例化
- radis
- HDU
- Iterator对象的remove方法是迭代过程中删除元素的唯一方法
- 两数之和 & 三数之和
- COGS 2580. [HZOI 2015]偏序 II
- 读书笔记,软件生存期模型
- Error : Execution failed for task : 'clean' . > unable delete directory : \build\...
- 我的并行计算之路(二)MPI点对点通信MPI_Send和MPI_Recv