博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java序列化流
阅读量:4696 次
发布时间:2019-06-09

本文共 2894 字,大约阅读时间需要 9 分钟。

 

1、什么是序列化流

序列化就是把Java对象“流化”,序列化后的Java对象可以保存到本地文件系统,或者通过Socket传输到其他的服务器。

Java中对象序列化有以下特点:

  1)类实现java.io.Serializable接口;

  2)瞬态或静态的字段无法序列化;

 

2、使用场景

在一些需要把数据存储到磁盘或者数据缓存的情况下可以使用到序列化

如:

1)web服务器关闭时把会话信息保存到服务器磁盘上;

2)web服务关闭时,把一些待处理的数据保存到服务器磁盘上;
3)mybatis、hibernate整合ehcache、redis、memcached等缓存服务缓存数据库数据,这个是一个比较重要的使用场景

记得以前做项目,有一些需要调用第三方接口给用户充流量、充话费的需求,为了较好的用户体验,使用了异步充值,即用户信息提交后把充值请求保存到消息队列,然后就返回响应给用户,后台有独立线程到消息队列查找请求调用接口完成充值。
为了避免在服务器重启时充值队列丢失,就在服务关闭前把消息队列通过序列化输出流保存到磁盘,在服务启动时从磁盘读取数据反序列化为充值请求对象保存到消息队列,这样充值线程开启时就可以继续给这些用户充值了。

 

3、ObjectInputStream类

把实现了java.io.Serializable接口的类对象(非静态成员和非瞬时成员数据)从硬盘文件或二进制数据读取到输入流。

 

1 FileInputStream fis = new FileInputStream("t.tmp");2 ObjectInputStream ois = new ObjectInputStream(fis);3 4 int i = ois.readInt();5 String today = (String) ois.readObject();6 Date date = (Date) ois.readObject();7 8 ois.close();

 

4、ObjectOutputStream类

将基本数据类型和实现了java.io.Serializable接口的类对象(非静态成员和非瞬时成员数据)写入到OutputStream流,从而实现对象的持久存储和网络传输。

 

1 FileOutputStream fos = new FileOutputStream("t.tmp");2 ObjectOutputStream oos = new ObjectOutputStream(fos);3 4 oos.writeInt(12345);5 oos.writeObject("Today");6 oos.writeObject(new Date());7 8 oos.close();

 

5、基础案例

 

1 public class Person implements Serializable { 2  3     private static final long serialVersionUID = -641073459191474480L; 4  5     private String name; 6     private int age; 7     private int weight; 8     private int height; 9 10     public Person() {11         super();12     }13 14     public Person(String name, int age, int weight, int height) {15         super();16         this.name = name;17         this.age = age;18         this.weight = weight;19         this.height = height;20     }21 22     // getter & setter23 24     @Override25     public String toString() {26         return "Person [name=" + name + ", age=" + age + ", weight=" + weight + ", height=" + height + "]";28     }29 }

 

1 public class TestSerializable { 2  3     // 对象序列化 4     private static void writeObject() throws Exception { 5  6         ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\\person.obj")); 7  8         Person p1 = new Person("admin1", 20, 170, 60); 9         Person p2 = new Person("admin2", 21, 171, 61);10 11         oos.writeObject(p1);12         oos.writeObject(p2);13 14         oos.close();15     }16 17     // 对象反序列化18     private static void readObject() throws Exception {19 20         ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:\\person.obj"));21 22         Person p1 = (Person) ois.readObject();23         Person p2 = (Person) ois.readObject();24 25         System.out.println(p1);26         System.out.println(p2);27 28         ois.close();29     }30 31     public static void main(String[] args) throws Exception {32 33         // 对象序列化34         writeObject();35 36         // 对象反序列化37         readObject();38 39     }40 }

 

转载于:https://www.cnblogs.com/xugf/p/9141134.html

你可能感兴趣的文章
端口扫描base
查看>>
iOS IM开发的一些开源、框架和教程等资料
查看>>
FansUnion:共同写博客计划终究还是“流产”了
查看>>
python 二维字典
查看>>
pip 警告!The default format will switch to columns in the future
查看>>
Arrays类学习笔记
查看>>
实验吧之【天下武功唯快不破】
查看>>
2019-3-25多线程的同步与互斥(互斥锁、条件变量、读写锁、自旋锁、信号量)...
查看>>
win7-64 mysql的安装
查看>>
dcm4chee 修改默认(0002,0013) ImplementationVersionName
查看>>
maven3在eclipse3.4.2中创建java web项目
查看>>
发布时间 sql语句
查看>>
黑马程序员 ExecuteReader执行查询
查看>>
记一些从数学和程序设计中体会到的思想
查看>>
题目1462:两船载物问题
查看>>
POJ 2378 Tree Cutting(树形DP,水)
查看>>
第二冲刺阶段个人博客5
查看>>
UVA 116 Unidirectional TSP (白书dp)
查看>>
第三方测速工具
查看>>
MySQL 网络访问连接
查看>>