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接口的类对象(非静态成员和非瞬时成员数据)从硬盘文件或二进制数据读取到输入流。

 FileInputStream fis = new FileInputStream("t.tmp");
ObjectInputStream ois = new ObjectInputStream(fis); int i = ois.readInt();
String today = (String) ois.readObject();
Date date = (Date) ois.readObject(); ois.close();

4、ObjectOutputStream类

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

 FileOutputStream fos = new FileOutputStream("t.tmp");
ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeInt(12345);
oos.writeObject("Today");
oos.writeObject(new Date()); oos.close();

5、基础案例

 public class Person implements Serializable {

     private static final long serialVersionUID = -641073459191474480L;

     private String name;
private int age;
private int weight;
private int height; public Person() {
super();
} public Person(String name, int age, int weight, int height) {
super();
this.name = name;
this.age = age;
this.weight = weight;
this.height = height;
} // getter & setter @Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", weight=" + weight + ", height=" + height + "]";
}
}
 public class TestSerializable {

     // 对象序列化
private static void writeObject() throws Exception { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\\person.obj")); Person p1 = new Person("admin1", 20, 170, 60);
Person p2 = new Person("admin2", 21, 171, 61); oos.writeObject(p1);
oos.writeObject(p2); oos.close();
} // 对象反序列化
private static void readObject() throws Exception { ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:\\person.obj")); Person p1 = (Person) ois.readObject();
Person p2 = (Person) ois.readObject(); System.out.println(p1);
System.out.println(p2); ois.close();
} public static void main(String[] args) throws Exception { // 对象序列化
writeObject(); // 对象反序列化
readObject(); }
}

Java序列化流的更多相关文章

  1. Java序列化流的奇妙之旅

    Java序列化流有何奇妙之处呢?通过一个个案例逐一感受序列化流. !!!好戏在后头!!! 1.IO流读写文件 先从一个普通文件读写字符串开始讲起. 例子:输出字符串到文件,再从文件中读取字符串 在某一 ...

  2. Java序列化流-ObjectOutputStream、ObjectInputStream

    Java对象流的基本概念: 实例代码: 实体类User: import java.io.Serializable; /** * @author zsh * @company wlgzs * @crea ...

  3. java 序列化流与反序列化流

    一 对象序列化流ObjectOutputStream ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream.可以使用 ObjectInputStr ...

  4. Java序列化格式详解

    RPC的世界,由于涉及到进程间网络远程通信,不可避免的需要将信息序列化后在网络间传送,序列化有两大流派: 文本和二进制. 文本序列化 序列化的实现有很多方式,在异构系统中最常用的就是定义成人类可读的文 ...

  5. Java API —— IO流(数据操作流 & 内存操作流 & 打印流 & 标准输入输出流 & 随机访问流 & 合并流 & 序列化流 & Properties & NIO)

    1.操作基本数据类型的流     1) 操作基本数据类型 · DataInputStream:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型.应用程序可以使用数据输出 ...

  6. Java基础知识强化之IO流笔记65:序列化流 和 反序列化流

    1. 什么是 序列化 和 反序列化 ?     序列化 (Serialization):将对象的状态信息转换为可以存储或传输的形式的过程.比如转化为二进制.xml.json等的过程. 在序列化期间,对 ...

  7. java中的序列化流和反序列化流

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px SimSun; color: #4e9072 } 序列化流:把对象按照流一样的方式存入文本文件 ...

  8. 【Java IO流】对象的序列化和反序列化

    对象的序列化和反序列化 1)对象序列化,就是将Object对象转换成byte序列,反之叫对象的反序列化. 2)序列化流(ObjectOutputStream),是字节的过滤流—— writeObjec ...

  9. Java学习笔记32(IO:序列化流)

    对象中的数据 ,以流的形式,写入到文件中保存,过程称为写出对象,对象的序列化 ObjectOutputStream将对象写到序列中,实现序列化 在文件中,以流 的形式,将对象读取出来,过程称为读取对象 ...

随机推荐

  1. Linux 把进程为D(不可中断进程)转换成其他状态

    问题现象:当前集群跑hadoop的时候,,任务失败,但是跑任务的容器没有正常退出,显示一大堆的YarcChild进程,,more /proc/进程/status   查看其状态,进程为D(disk s ...

  2. ICEM-两管相贯

    原视频下载地址:https://pan.baidu.com/s/1qYe0AzM 密码: tmd5

  3. Tensorflow r1.12及tensorflow serving r1.12 GPU版本编译遇到的问题

    1.git clone tensorflow serving 及tensorflow代码 2. ERROR: /root/.cache/bazel/_bazel_root/f71d782da17fd8 ...

  4. ora-8176原因及解决方法

    在oracle undo_retention范围内,且_undo_autotune=false的情况下,一个语句执行的时候仍然发生ora-8176,语句如下: INSERT INTO XXX SELE ...

  5. pycharm项目添加.gitignore忽略.idea文件夹

    本地项目结构: .gitignore文件中添加: at_alsv_pro/.idea/SearchImage.iml at_alsv_pro/.idea/misc.xml at_alsv_pro/.i ...

  6. python 把带小数的浮点型字符串转换为整数的解决方案

    以下内容在python中完全可以接受: 将整数的字符串表示形式传递给 int 将float的字符串表示形式传递给 float 但是,如果你将float型的字符串传递给int将会得到错误. >&g ...

  7. ROS tf-深入Time和TF

    博客转载自:https://www.ncnynl.com/archives/201702/1313.html ROS与C++入门教程-tf-深入Time和TF 说明: 介绍使用waitForTrans ...

  8. 西门子PLC1200内使用SCL实现简化版PID算法

    西门子自带的PID效果很好,但是会比较吃性能,使用次数有限,很多地方需要PID但不需要这么精准的PID,所以网上找个简单的算法自己调用. 新建数据类型 前三个就是PID三个参数 新建FC块: #PID ...

  9. Kubernetes 配置管理 Dashboard(十三)

    目录 一.安装配置 1.1 下载 镜像 1.2.安装 1.3.修改 NodePort 二.配置授权 Kubernetes 所有的操作我们都是通过命令行工具 kubectl 完成的.为了提供更丰富的用户 ...

  10. 算法练习之杨辉三角,杨辉三角的第 k 行,买卖股票的最佳时机

    1. 杨辉三角 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 输出: [ [], [,], [,,], [ ...