一、序列化

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 }

转载于:https://www.cnblogs.com/dahaoheshan/p/7344222.html

序列化Serializable接口相关推荐

  1. 理解Java对象序列化——Serializable接口

    概述:当一个类实现了Serializable接口(该接口仅为标记接口,不包含任何方法定义),表示该类可以序列化.序列化的目的是将一个实现了Serializable接口的对象转换成一个字节序列,可以. ...

  2. 编程进阶:Java小白的序列化Serializable接口

    在之前的学习过程中,我们知道了如何使用FileInputStream输入流和FileOutputStream输出流编写程序读写文件. 下面我们来学习一下如何使用序列化和反序列化读写文件. 一.序列化 ...

  3. java对象序列化java.io.Serializable 接口实践

    java.io.Serializable 接口没有任何方法和字段,仅仅表示实现它的类的对象可以被序列化.实现了这个接口的所有类及其子类都可以对象序列化. 序列化前,虚拟机要清楚每个对象的结构,所以序列 ...

  4. Java序列化接口Serializable接口的作用总结

    一.Java序列化接口Serializable的作用: 一个对象有对应的一些属性,把这个对象保存在硬盘上的过程叫做"持久化". 对象的默认序列化机制写入的内容是:对象的类,类签名, ...

  5. Serializable 接口与 Java 序列化与反序列化

    0. 序列化的意义 从内存到本地即为本地化或者在网络中进行传输,或叫序列化,持久化. 某 Java 类实现 Serializable 接口的目的是为了可持久化(简单理解为本地化),比如网络传输或本地存 ...

  6. 为什么实体类要实现serializable接口序列化

    最重要的两个原因是: 1.将对象的状态保存在存储媒体中以便可以在以后重新创建出完全相同的副本: 2.按值将对象从一个应用程序域发送至另一个应用程序域. 实现serializable接口的作用是就是可以 ...

  7. 使用Serializable接口来自定义PHP中类的序列化

    使用Serializable接口来自定义PHP中类的序列化 关于PHP中的对象序列化这件事儿,之前我们在很早前的文章中已经提到过 __sleep() 和 __weakup() 这两个魔术方法.今天我们 ...

  8. 对象序列化的 两种种方式(实现Serializable接口和实现Externalizable接口)

    文章目录 1.方式一(实现Serializable接口,通过序列化流) 2.方式二 (实现Externalizable接口,重写writeExternal和readExternal方法) 对象序列化的 ...

  9. Java中的Serializable接口之“序列化”与“反序列化”

    你是不是想问:为什么有的类实现Serializable接口?还有什么是序列化和反序列化? 带着这个问题往下看,看完就明白了! 序列化与反序列化 序列化是指把对象转换为字节序列的过程,我们称之为对象的序 ...

最新文章

  1. html模板引擎 字符串长度,Web前端模板引擎の字符串模板
  2. 世道变了!这个AI竞赛不再要刷榜成绩,直接看商业落地计划书
  3. unbuntu nginx安装详解 /configure: error: the HTTP rewrite module requires the PCRE library
  4. 活体检测很复杂?仅使用opencv就能实现!(附源码)
  5. PLSQL_统计信息系列10_统计信息过旧导致程序出现性能问题
  6. Java EE与Java SE:Oracle是否放弃了企业软件?
  7. 【1489】求二叉树的先序遍历 SDUTOJ
  8. 即时通讯软件几个主要下载分类
  9. PyTorch最佳实践,怎样才能写出一手风格优美的代码
  10. antdesign 地图_React 使用recharts实现散点地图的示例代码
  11. memcache_engine-高性能分布式内存数据库
  12. 19年计算机专硕学硕报名人数,2019年研究生招生报考权威数据排行,报考人数逐年上升的态势!...
  13. java saas 开源框架_(转载)适合SaaS的几种架构比较
  14. 磁共振成像(Magnetic Resonance Imaging,MRI)学习资料汇总,包括:在线学习视频、网站、教材
  15. word怎么显示计算机数字,在word中输入数字时为什么出现符号
  16. 临床医学中的生物信息学
  17. ftok()函数的使用
  18. 【ThreeJS】场景后处理增加圆形暗角效果
  19. 交通灯keil程序加2位数码管_带数码管显示的十字路口交通灯控制 C 程序
  20. SpringBoot+JWT实现登陆token验证并存储用户信息

热门文章

  1. 综述:基于图学习的推荐系统;论文笔记
  2. C# 学习笔记入门篇(上)
  3. 【活动预热】“2021年中国农民丰收节·我为高邮代言”直播活动火热来袭!
  4. 业余爱好者想入门编程,一定远离那些只会说No的家伙,尤其程序员
  5. 026 Rust死灵书之实现Vec
  6. 【云原生 · Kubernetes】Kubernetes基础环境搭建
  7. Windows权限维持之建立影子账号、powershell配置文件后门、Monitor权限维持
  8. 是时候选择诺基亚Windows Phone手机
  9. GBase 8a 支持存储过程、自定义函数的定义和使用
  10. Python实现ALO蚁狮优化算法优化支持向量机回归模型(SVR算法)项目实战