Java 串行化技术可以使你将一个对象的状态写入一个Byte流里,并且可以从其它地方把该Byte 流里的数据读出来,重新构造一个相同的对象。这种机制允许你将对象通过网络进行传播,并可以随时把对象持久化到数据库、文件等系统里。Java的串行化机制是RMI、EJB等技术的技术基础。用途:利用对象的串行化实现保存应用程序的当前工作状态,下次再启动的时候将自动地恢复到上次执行的状态。

序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。

序列化的实现:将需要被序列化的类实现Serializable接口,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。

2、串行化的特点:

(1)如果某个类能够被串行化,其子类也可以被串行化。如果该类有父类,则分两种情况来考虑,如果该父类已经实现了可串行化接口。则其父类的相应字段及属性的处理和该类相同;如果该类的父类没有实现可串行化接口,则该类的父类所有的字段属性将不会串行化。

(2)声明为static和transient类型的成员数据不能被串行化。因为static代表类的状态,transient代表对象的临时数据;

(3)相关的类和接口:在java.io包中提供的涉及对象的串行化的类与接口有ObjectOutput接口、ObjectOutputStream类、ObjectInput接口、ObjectInputStream类。

(1)ObjectOutput接口:它继承DataOutput接口并且支持对象的串行化,其内的writeObject()方法实现存储一个对象。ObjectInput接口:它继承DataInput接口并且支持对象的串行化,其内的readObject()方法实现读取一个对象。

(2)ObjectOutputStream类:它继承OutputStream类并且实现ObjectOutput接口。利用该类来实现将对象存储(调用ObjectOutput接口中的writeObject()方法)。ObjectInputStream类:它继承InputStream类并且实现ObjectInput接口。利用该类来实现读取一个对象(调用ObjectInput接口中的readObject()方法)。

对于父类的处理,如果父类没有实现串行化接口,则其必须有默认的构造函数(即没有参数的构造函数)。否则编译的时候就会报错。在反串行化的时候,默认构造函数会被调用。但是若把父类标记为可以串行化,则在反串行化的时候,其默认构造函数不会被调用。这是为什么呢?这是因为Java 对串行化的对象进行反串行化的时候,直接从流里获取其对象数据来生成一个对象实例,而不是通过其构造函数来完成。

import java.io.*;
public class Cat implements Serializable {
private String name;
public Cat () {
this.name = "new cat";
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public static void main(String[] args) {
Cat cat = new Cat();
try {
FileOutputStream fos = new FileOutputStream("catDemo.out");
ObjectOutputStream oos = new ObjectOutputStream(fos);
System.out.println(" 1> " + cat.getName());
cat.setName("My Cat");
oos.writeObject(cat);
oos.close();
} catch (Exception ex) {  ex.printStackTrace();   }
try {
FileInputStream fis = new FileInputStream("catDemo.out");
ObjectInputStream ois = new ObjectInputStream(fis);
cat = (Cat) ois.readObject();
System.out.println(" 2> " + cat.getName());
ois.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}//writeObject和readObject本身就是线程安全的,传输过程中是不允许被并发访问的。所以对象能一个一个接连不断的传过来

什么是java序列化,如何实现java序列化?相关推荐

  1. java 序列化慢_java原生序列化慢在哪里?

    Java原生序列化和二进制序列化性能比较 序列化速度 package com.clq.netty.serializable; import java.io.ByteArrayOutputStream; ...

  2. java序列化库_java 中序列化(Serializable)

    18年5月份,在毕业快一年的时候,我终于把自己从研发助理偏向行政打杂,偶尔写一些前端代码的处境,回归到了初衷-安安静静写前后端代码的小小程序员~过程中的心酸也就不在这里吐啦,毕竟我是小太阳,永不熄灭的 ...

  3. Java程序员必备:序列化全方位解析

    前言 相信大家日常开发中,经常看到Java对象"implements Serializable".那么,它到底有什么用呢?本文从以下几个角度来解析序列这一块知识点~ 什么是Java ...

  4. java序列化和反序列化以及序列化ID的作用分析

     java序列化和反序列化 一.概念 java对象序列化的意思就是将对象的状态转化成字节流,以后可以通过这些值再生成相同状态的对象.对象序列化是对象持久化的一种实现方法,它是将对象的属性和方法转化为一 ...

  5. java IO(输入输出) 对象的序列化和反序列化

    //对象的序列化 package zhi_jie_liu;import java.io.FileInputStream; import java.io.FileNotFoundException; i ...

  6. Java开发:什么是序列化?

    1系列化(Serialize)是干什么的? 这是IO存储中的一个概念.计算机中所有的内容都是0或者1的数字.这些数字按顺序排列,便可以表示计算机中的万事万物,当然Java的对象也不例外.在内存中,无论 ...

  7. Java之什么是序列化以及为什么要序列化

    http://blog.csdn.net/tlycherry/article/details/8986720  序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化,将数据分解成字 ...

  8. java 属性不序列化_怎样对带有不可序列化属性的Java对象进行序列化

    原标题:怎样对带有不可序列化属性的Java对象进行序列化 出于很多原因我们想使用自定义的序列化方法取代Java默认的机制.一个最常见的原因是提高性能,而另一个原因是有时候我们无法使用默认的序列化方法. ...

  9. java安全编码指南之:序列化Serialization

    文章目录 简介 序列化简介 注意serialVersionUID writeObject和readObject readResolve和writeReplace 不要序列化内部类 如果类中有自定义变量 ...

  10. java序列化_夯实Java基础系列22:一文读懂Java序列化和反序列化

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

最新文章

  1. 【组队学习】【27期】集成学习
  2. 由《我不是药神》到互联网行业从业保障
  3. web后端学习过程中技巧总结(持续更新。。。)
  4. 问题解决:使用angularjs、ionic框架如何实现返回上一页并刷新
  5. 推荐几款jquery图片切换插件
  6. pytorch学习2:pytorch搭建Alexnet网络
  7. 分析函数——rollup,cube,rank,partition by
  8. iptables随笔
  9. 【软件工程】几种模型概念:瀑布模型,快速原型模型,增量模型,螺旋模型,喷泉模型
  10. python 西门子wincc_西门子SIMATIC Manager和SIMATIC WinCC Explorer万能授权
  11. vmware ubuntu 内存不够解决方案
  12. PhotoShopCS6报错error:16解决办法
  13. 湖南中烟计算机专业考试,2018湖南中烟招聘笔试题目,2019笔试内容
  14. buck电路上下管_什么是 BUCK 电路_BUCK 电路工作原理_BUCK 电路图-与非网
  15. 我与梅西粉丝们的世界杯观球日常
  16. CentOS7虚拟机网络设置及使用代理服务器
  17. 模拟法庭教学实训软件QY-RJ11
  18. android 对数标度 图库,对数标度
  19. 什么是销售管理软件及其重要性
  20. SpringBoot单元测试如何回滚测试数据

热门文章

  1. 音视频技术开发周刊 | 138
  2. 舞台现场直播技术实践
  3. Hadoop之Yarn工作机制详解
  4. 《视频直播技术详解》系列之八:直播云 SDK 性能测试模型
  5. MySQL InnoDB Cluster安装
  6. 【Java语法】比较两个字符串是否相等
  7. C++ 覆盖方法、重载方法的理解
  8. JDK 14的新特性:switch表达式
  9. java中ThreadLocalRandom的使用
  10. Scala教程之:Scala基础