【java基础】15.I/O:序列化
来源:互联网 发布:杭州 软件开发 编辑:程序博客网 时间:2024/05/18 03:52
•将对象转换为字节流保存起来,并在以后还原这个对象,这种机制叫做对象序列化。
•将一个对象保存到永久存储设备上称为持久化。
•一个对象要想能够实现序列化,必须实现Serializable接口或Externalizable接口。
一个类若想被序列化,则需要实现java.io.Serializable接口,该接口中没有定义任何方法,是一个标识性接口(Marker Interface),当一个类实现了该接口,就表示这个类的对象是可以序列化的。
序列化(serialization)是把一个对象的状态写入一个字节流的过程。当你想要把你的程序状态存到一个固定的存储区域例如文件时,它是很管用的
反序列化:就是把信息从文件加载到程序的过程。
•当一个对象被序列化时,只保存对象的非静态成员变量,不能保存任何的成员方法和静态的成员变量。
•如果一个对象的成员变量是一个对象,那么这个对象的数据成员也会被保存。
在序列化时,static变量是无法序列化的;如果A包含了对B的引用,那么在序列化A的时候也会将B一并地序列化;如果此时A可以序列化,B无法序列化,那么当序列化A的时候就会发生异常,这时就需要将对B的引用设为transient,该关键字表示变量不会被序列化。
•Serializable接口
–只有一个实现Serializable接口的对象可以被序列化工具存储和恢复。Serializable接口没有定义任何成员。它只用来表示一个类可以被序列化。如果一个类可以序列化,它的所有子类都可以序列化。
–声明成transient的变量不被序列化工具存储。同样,static变量也不被存储
•ObjectOutput接口
–ObjectOutput 继承DataOutput接口并且支持对象序列化。特别注意writeObject( )方法,它被称为序列化一个对象。所有这些方法在出错情况下引发IOException 异常
ObjectOutputStream类
–ObjectOutputStream类继承OutputStream 类和实现ObjectOutput 接口。它负责向流写入对象
•ObjectInput
–ObjectInput 接口继承DataInput接口。它支持对象序列化。特别注意 readObject( )方法,它叫反序列化对象
•ObjectInputStream
–ObjectInputStream 继承InputStream 类并实现ObjectInput 接口。ObjectInputStream 负责从流中读取对象。该类的构造方法如下:
–ObjectInputStream(InputStream inStream)
throws IOException,StreamCorruptedException
private void writeObject(java.io.ObjectOutputStream out) throws IOException{ out.writeInt(age); out.writeUTF(name); System.out.println("write object");} private void readObject(java.io.ObjectIutputStream in) throws IOException,ClassNotFoundException{ age = in.readInt(); name = in.readUTF(); System.out.println("read object");}
当我们在一个待序列化/反序列化的类中实现了以上两个private方法(方法声明要与上面的保持完全的一致),那么就允许我们以更加底层、更加细粒度的方式控制序列化/反序列化的过程。
注:此文档为学习圣思园风中叶教程结合自身学习所记录。
阅读全文
0 0
- 【java基础】15.I/O:序列化
- Java I/O中的对象序列化
- java I/O:对象的序列化
- Java I/O中的对象序列化
- Java I/O中的对象序列化
- Java I/O中的对象序列化
- Java I/O 序列化机制
- Java I/O中的对象序列化
- Java I/O流与序列化
- java基础---->I/O
- JAVA基础--I/O
- JAVA基础--I/O
- JavaSE入门学习46:文件传输基础之I/O流(五)(Java序列化)
- JavaSE入门学习46:文件传输基础之I/O流(五)(Java序列化)
- java 基础之 I/O流 其四 (对象流和序列化)
- java基础:I/O流
- Java I/O 基础总结
- java基础之I/O
- 将excel树形结构的数据导入数据库
- python基础学习(二)
- jsbc.properties
- angular2中 使用mqtt
- servlet生命周期
- 【java基础】15.I/O:序列化
- How to check memory leaks in android app?
- Maven学习笔记
- Excel 2 Json For Python In Mac
- maven环境配置
- maven +SpringMVC项目的创建中遇到的问题总结
- 使用 Xlistview 展示网络请求数据
- 成功更改MySQL编码为utf8的过程
- html缓存-mainfest