Java序列化(Serialize)和反序列化(Deserialize)
2016-07-04 00:08
501 查看
对象的序列化
一、目的:
将对象转换成与平台无关的二进制流,从而可以保存到磁盘或者进行网络传输,其它程序获 得这个二进制流后可以将其还原成对象。
序列化机制可以使对象可以脱离程序的运行而对立存在。
————————————————————————————————————————
二、是什么?
序列化(Serialize)指将一个java对象写入IO流中,与此对应的是,对象的反序列化(Deserialize)则指从IO流中恢复该java对象。
————————————————————————————————————————
三、如何实现对象的序列化
————————————————————————————————————————
四、将对象写入文件
应该注意的问题:
* ObjectOutputStream 的构造方法,需要借助一个字节输出流,并可能存在IOException。
———————————————————————————————————————
五、文件中读取数据,并转换对象
应该注意的问题:
一、目的:
将对象转换成与平台无关的二进制流,从而可以保存到磁盘或者进行网络传输,其它程序获 得这个二进制流后可以将其还原成对象。
序列化机制可以使对象可以脱离程序的运行而对立存在。
————————————————————————————————————————
二、是什么?
序列化(Serialize)指将一个java对象写入IO流中,与此对应的是,对象的反序列化(Deserialize)则指从IO流中恢复该java对象。
————————————————————————————————————————
三、如何实现对象的序列化
要实现对象的序列化,必须让它的类实现序列化,可以通过实现Serializable接口。 特别:1) Serializable接口中并没有需要实现的方法,它的作用仅仅是一个标记,表示实现 它的类是可序列化的。诸如像Serializable这种没有方法的接口,我们一般称之为 标记接口。 2)一定要添加序列化版本号(serialVersionUID) 3)一个类中可能有很多的成员变量,有些我不想进行序列化。请问该怎么办呢? 使用transient关键字声明不需要序列化的成员变量
————————————————————————————————————————
四、将对象写入文件
1)创建对象输出流对象 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.txt")); 2)创建可序列化类的对象 Student s = new Student("张三",15); 3) 将对象写入文件 oos.writeObject(s); 4)关闭资源 oos.close();
应该注意的问题:
* ObjectOutputStream 的构造方法,需要借助一个字节输出流,并可能存在IOException。
public ObjectOutputStream(OutputStream out)throws IOException * 在执行oos.writeObject(s)时,可能抛出以下异常: ** InvalidClassException 可能的原因: <*>该类的序列版本号与从流中读取的类描述符的版本号不匹配 <*>该类包含未知数据类型 <*>该类没有可访问的无参数构造方法 ** NotSerializableException 类未实现Serializable接口 ** IOException
———————————————————————————————————————
五、文件中读取数据,并转换对象
// 创建反序列化对象 ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.txt")); // 还原对象 Object obj = ois.readObject(); // 释放资源 ois.close(); // 输出对象 System.out.println(obj);
应该注意的问题:
* 在执行ois.readObject();的时候可能抛出IOException, ClassNotFoundException * 得到的obj不需要强转为Student就可以直接输出。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树