序列化Serializable接口
一、序列化
1.什么是序列化?
序列化就是将对象的状态存储到特定存储介质中的过程,也就是将对象状态转换为可保持或传输格式的过程。
在序列化过程中,会将对象的公有成员、私有成员(包括类名),转换为字节流,然后再把字节流写入数据流,存储到存储介质中,这里说的存储介质通常指文件。
序列化后的对象保存的是二进制状态,这样实现了平台无关性,通过反序列化得到对象,而无需担心数据因平台问题而显示异常。
2.使用序列化保存对象信息
序列化机制允许将实现序列化的Java对象转换为字节序列,这个过程需要借助I/O流来实现。
只有实现了java.io.Serializable接口的类的对象才能被序列化,Serializable表示可串行的,可序列化的(串行化)。
JDK中如String类、包装类和Date类等,都实现了Serializable接口。
二、反序列化
使用反序列化获取对象信息:
1.创建一个对象输出流(ObjectInputStream),它可以包装一个其它类型的输入流。
2.通过对象输入流的readObject()方法读取对象,该方法返回一个object类型的对象,如果程序知道该Java对象的类型,则可以将该对象强制转换成其真实的类型。

1 import java.io.FileNotFoundException;
2 import java.io.FileOutputStream;
3 import java.io.IOException;
4 import java.io.ObjectOutputStream;
5
6 import bdqn.filedemo.Student;
7
8 /**
9 * 用序列化保存对象信息:
10 * 1.创建一个对象输出流(ObjectOutputStream),它可以包装一个其它类型的输出流。
11 * 2.通过对象输出流的writeObject()方法写对象,也就是输出可序列化对象。
12 * @author Administrator
13 *
14 */
15 public class SerializableObj {
16 /**
17 * 使用序列化将学生对象保存到文件中,实现步骤如下:
18 * 1.创建学生类,实现Serializable接口
19 * 2.引入相关类
20 * 3.创建对象输出流
21 * 4.调用writeObject()方法将对象写入文件
22 * 5.关闭对象输出流
23 * @param args
24 */
25 public static void main(String[] args) {
26 ObjectOutputStream oos = null;
27 try {
28 //创建ObjectOutputStream输出流
29 oos = new ObjectOutputStream(new FileOutputStream("D:\\tengyicheng\\stu.txt"));
30 Student stu = new Student("安娜",28,"女");
31 //对象序列化,写入输出流
32 oos.writeObject(stu);
33 System.out.println("录入成功!");
34 } catch (FileNotFoundException e) {
35 e.printStackTrace();
36 } catch (IOException e) {
37 e.printStackTrace();
38 }
39 finally{
40 if (oos!=null) {
41 try {
42 oos.close();
43 } catch (IOException e) {
44 e.printStackTrace();
45 }
46 }
47 }
48
49 }
50
51 }


1 import java.io.FileInputStream;
2 import java.io.IOException;
3 import java.io.ObjectInputStream;
4
5 import bdqn.filedemo.Student;
6
7 /**
8 * 使用反序列化获取对象信息:
9 * 1.创建一个对象输出流(ObjectInputStream),它可以包装一个其它类型的输入流。
10 * 2.通过对象输入流的readObject()方法读取对象,该方法返回一个object类型的对象,如果程序知道该Java对象的类型,则可以将该对象强制转换成其真实的类型。
11 * @author Administrator
12 *
13 */
14 public class DeSerializableObj {
15
16 /**
17 * 使用反序列化读取文件中的学生对象:
18 * 1.引入相关类
19 * 2.创建对象输入流
20 * 3.调用readObject()方法读取对象
21 * 4.关闭对象输入流。
22 * @param args
23 */
24 public static void main(String[] args) {
25 ObjectInputStream ois = null;
26 try {
27 //创建ObjectInputStream输入流
28 ois = new ObjectInputStream(new FileInputStream("D:\\tengyicheng\\stu.txt"));
29 Student object = (Student)ois.readObject();
30 System.out.println("姓名:"+object.getName());
31 System.out.println("年龄:"+object.getAge());
32 System.out.println("性别:"+object.getSex());
33 } catch (Exception e) {
34 e.printStackTrace();
35 }
36 finally{
37 if (ois!=null) {
38 try {
39 ois.close();
40 } catch (IOException e) {
41 e.printStackTrace();
42 }
43 }
44 }
45
46 }
47
48 }


1 import java.io.FileNotFoundException;
2 import java.io.FileOutputStream;
3 import java.io.IOException;
4 import java.io.ObjectOutputStream;
5 import java.util.LinkedList;
6 import java.util.List;
7
8 import bdqn.filedemo.Student;
9
10 /**
11 * 序列化一组对象
12 * @author Administrator
13 *
14 */
15 public class SerializableList {
16
17 public static void main(String[] args) {
18 ObjectOutputStream oos = null;
19 //创建一组学生对象
20 Student stu1 = new Student("李小冉",28,"女");
21 Student stu2 = new Student("赵丽颖",28,"女");
22 Student stu3 = new Student("胡歌",32,"男");
23 Student stu4 = new Student("王凯",35,"男");
24 //创建一组列表保存
25 List<Student> list = new LinkedList<Student>();
26 list.add(stu1);
27 list.add(stu2);
28 list.add(stu3);
29 list.add(stu4);
30 //创建对象输出流
31 try {
32 oos = new ObjectOutputStream(new FileOutputStream("D:\\tengyicheng\\stu1.txt"));
33 //写入输出流
34 oos.writeObject(list);
35 } catch (FileNotFoundException e) {
36 e.printStackTrace();
37 } catch (IOException e) {
38 e.printStackTrace();
39 }
40 finally{
41 if (oos!=null) {
42 try {
43 oos.close();
44 } catch (IOException e) {
45 e.printStackTrace();
46 }
47 }
48 }
49
50 }
51
52 }


1 import java.io.FileInputStream;
2 import java.io.FileNotFoundException;
3 import java.io.IOException;
4 import java.io.ObjectInputStream;
5 import java.util.LinkedList;
6 import java.util.List;
7
8 import bdqn.filedemo.Student;
9
10 /**
11 * 反序列化读取一组对象
12 * @author Administrator
13 *
14 */
15 public class DeSerializableList {
16
17 public static void main(String[] args) {
18 ObjectInputStream ois = null;
19 try {
20 //创建对象输入流
21 ois = new ObjectInputStream(new FileInputStream("D:\\tengyicheng\\stu1.txt"));
22 //读取对象
23 @SuppressWarnings("unchecked")
24 List<Student> stus = (LinkedList<Student>)ois.readObject();
25 for (Student stu : stus) {
26 System.out.println("姓名:"+stu.getName());
27 System.out.println("年龄:"+stu.getAge());
28 System.out.println("性别:"+stu.getSex());
29 }
30 } catch (FileNotFoundException e) {
31 e.printStackTrace();
32 } catch (ClassNotFoundException e) {
33 e.printStackTrace();
34 } catch (IOException e) {
35 e.printStackTrace();
36 }
37 finally{
38 if (ois!=null) {
39 try {
40 ois.close();
41 } catch (IOException e) {
42 e.printStackTrace();
43 }
44 }
45 }
46
47 }
48
49 }

序列化Serializable接口的更多相关文章
- java:序列化Serializable 接口
java:序列化Serializable 接口 public class SerializePerson implements Serializable { private String name; ...
- Java 序列化Serializable接口
1 什么是序列化和反序列化 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程. 2 什么情况下需要 ...
- 编程进阶:Java小白的序列化Serializable接口
在之前的学习过程中,我们知道了如何使用FileInputStream输入流和FileOutputStream输出流编写程序读写文件. 下面我们来学习一下如何使用序列化和反序列化读写文件. 一.序列化 ...
- Java 的序列化Serializable接口介绍及应用
常看到类中有一串很长的 如 private static final long serialVersionUID = -4667619549931154146L;的数字声明.这些其实是对此类进行序列化 ...
- 序列化、反序列化(实体类或要序列化的对象类必须实现Serializable接口)
package com.phone.shuyinghengxie; import java.io.Serializable; /* 一个类的对象要想序列化成功,必须满足两个条件: 该类必须实现 jav ...
- 谈谈序列化—实体bean一定要实现Serializable接口?
导读:最近在做项目的过程中,发现一个问题,就是我们最开始的时候,传递参数包括返回类型,都有map类型.但是由于map每次都要匹配key值,很麻烦.所以在之后就将参数传递和返回类型全都改成了实体bean ...
- Java Serializable接口(序列化)理解及自定义序列化
1 Serializable接口 (1)简单地说,就是可以将一个对象(标志对象的类型)及其状态转换为字节码,保存起来(可以保存在数据库,内存,文件等),然后可以在适当的时候再将其状态恢复(也就是反 ...
- Java序列化接口Serializable接口的作用总结
一.Java序列化接口Serializable的作用: 一个对象有对应的一些属性,把这个对象保存在硬盘上的过程叫做”持久化”. 对象的默认序列化机制写入的内容是:对象的类,类签名,以及非瞬态和非静态字 ...
- 【Java面试题】45 什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。
我们有时候将一个java对象变成字节流的形式传出去或者从一个字节流中恢复成一个java对象,例如,要将java对象存储到硬盘或者传送给网络上的其他计算机,这个过程我们可以自己写代码去把一个java对象 ...
随机推荐
- Python调试器-pdb的使用
[简介] pdb是python自带的一个包,为python程序提供了一种交互的源代码调试功能. [使用方法] 1. 使用命令: python -m pdb xxx.py #可以直接进入单步执行模式 2 ...
- 在C#中用静态类来扩展类的方法
目录 在C#中用静态类来扩展类的方法 1.待扩展类 2.用于扩展的静态类中的静态方法 3 静态扩展方法的调用 4 适用场景 在C#中用静态类来扩展类的方法 1.待扩展类 private IList&l ...
- spring 5.x 系列第3篇 —— spring AOP (xml配置方式)
文章目录 一.说明 1.1 项目结构说明 1.2 依赖说明 二.spring aop 2.1 创建待切入接口及其实现类 2.2 创建自定义切面类 2.3 配置切面 2.4 测试切面 附: 关于切面表达 ...
- 【设计模式】结构型05组合模式(Composite Pattern)
组合模式(Composite Pattern) 意图:将对象组合成树形结构以表示"部分-整体"的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性. 主要解决:它在我们 ...
- 监控redis的操作命令
查看redis客户端的操作记录,即~/.rediscli_history. ls /home/*/.rediscli* 但是看不到代码操作redis的记录,只是redis-cli的记录.可以用moni ...
- 模块(二)os hashlib
模块(二)os hashlib 1.序列化模块 1.1 json 将满足条件的数据结构转化成特殊的字符串,并且可以反序列化转回去 # 两对方法 # 1 dumps() loads() ## 多用于网络 ...
- Codeforces Gym101246J:Buoys(三分搜索)
http://codeforces.com/gym/101246/problem/J 题意:给出n个点坐标,要使这些点间距相同的话,就要移动这些点,问最少的需要的移动距离是多少,并输出移动后的坐标. ...
- 深度总结eMMC发展史 ICMAX值得更好地期待
随着大数据.云计算.物联网等产业的发展,信息存储安全一旦受到威胁,将危害到政军.石油.化工.核能.金融等所有行业的安全.存储芯片又被称为电子产品的“粮食”,占产品成本的二成左右,尽管中国是全球最大的手 ...
- BZOJ 2039人员雇佣
这道题教会我们一个道理靠谁也不如靠自己. 当时学长已经讲了,然而一脸懵逼,好吧,上网搜题解,二脸懵逼,于是自己动手,丰衣足食.自己推! 首先就是建模了,这道题谁与谁之间建模已经十分明了,超级源点,超级 ...
- HTML&CSS构建和设计网站
1.a链接:两个特性,href.target,href里添加mailto:邮箱可以直接链接到其它人的邮箱,添加#id,可以把窗口位置直接定位到该id的元素位置, target:_black可以在新的窗 ...