如下代码示例:实现了Serializable接口(强制)的类,可以通过ObjectOutputStream的writeObject()方法转为字节流。
字节流通过ObjectInputStream的readObject方法可以逆序列化为对象。
 1 @Data
2 static class SimplePOJO implements Serializable{
3 String field1;
4 String field2;
5 public SimplePOJO(String s1, String s2) {
6 field1 = s1;
7 field2 = s2;
8 }
9 }
10
11 public static void main(String[] args) throws IOException, ClassNotFoundException {
12 //JDK自带序列化方法
13 FileOutputStream fos = new FileOutputStream("C:\\Users\\user\\Desktop\\student.dat");
14 SimplePOJO student = new SimplePOJO("16","张三");
15 ObjectOutputStream oos = new ObjectOutputStream(fos);
16 oos.writeObject(student);
17 oos.flush();
18 oos.close();
19 FileInputStream fis = new FileInputStream( "C:\\Users\\user\\Desktop\\student.dat");
20 ObjectInputStream ois = new ObjectInputStream(fis);
21 SimplePOJO deStudent = (SimplePOJO) ois.readObject();
22 ois.close();
23 System.out.println(deStudent);
24 }
  我们用文本编辑器打开保存的中间文件student.dat看看(因为是字节流,会有乱码:
  按照序列化协议的通用设计规则,会在首部包含数据的长度和首部长度。上图我们能明显看到类名和各个属性的类型和值,还能明显看到多个相同的间隔符。
 
  实际上该序列化协议的格式为:
  序列化过程就是在读取对象数据的时候,不断加入一些特殊分隔符,这些特殊分隔符用于在反序列化过程中截断用。
  头部数据用来声明序列化协议、序列化版本,用于高低版本向后兼容。
  对象数据主要包括类名、签名、属性名、属性类型及属性值,当然还有开头结尾等数据,除了属性值属于真正的对象值,其他都是为了反序列化用的元数据。
  存在对象引用、继承的情况下,就是递归遍历“写对象”逻辑。

最新文章

  1. 【JavaEE企业应用实战学习记录】requestListener
  2. std::stringstream
  3. 做网站用UTF-8还是GB2312 & 各国语言对应字符集
  4. 查看PostgreSQL版本,编译器版本号
  5. Entity Framework 5问题集锦
  6. 【SVN】删除文件/文件夹 svn: E205007: Could not use external editor to fetch log message
  7. 待解决)leetcode 路径和 dfs 线序遍历
  8. join函数——Gevent源码分析
  9. 软件设计师.NET认证考试测试卷(试题及答案)
  10. C++矩阵处理库--Eigen初步使用
  11. headfirst设计模式(2)—观察者模式
  12. spring 内部工作机制(一)
  13. 2014年7月10日,我人生的最重要Upgrade
  14. python小练习: 给定一个数组 按重复次数 降序排列输出 数组非空且为正整数
  15. 【IOS】#import和#include有什么区别,@class呢,#import<>跟#import ""有什么区别?
  16. SQL(ORACLE)
  17. Objective-C 性能监控
  18. c#day03
  19. vuex实践之路——笔记本应用(三)
  20. 深入HBase架构解析(二)【转】

热门文章

  1. CSS垂直布局
  2. 高精地图技术专栏 | 基于空间连续性的异常3D点云修复技术
  3. PTA 统计二叉树结点个数
  4. MarkDown-简单学习
  5. kong 结合 istio demo
  6. TCP 和 UDP 协议简介
  7. SQL语句通过身份证号计算年龄
  8. ssh+scp基本使用
  9. Python:读写文件(I/O) | 组织文件
  10. Day17_105_IO_BufferWriter带缓冲区的字符输出流