Java 对象的序列化和反序列化

 

一.序列化和反序列化的概念

 

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

 

      把对象转换为字节序列的过程称为对象的序列化。

      把字节序列恢复为对象的过程称为对象的反序列化。

      对象的序列化主要有两种用途:

      1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;

      2) 在网络上传送对象的字节序列。

      在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存。比如最常见的是Web服务器中的Session对象,当有 10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些seesion先序列化到硬盘中,等要用了,再把保存在硬盘中的对象还原到内存中。

      当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。

 

二.JDK库类中的序列化API

      java.io.ObjectOutputStream代表对象输出流,它的writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。

      java.io.ObjectInputStream代表对象输入流,它的readObject()方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。

     只有实现了Serializable和Externalizable接口的类的对象才能被序列化。Externalizable接口继承自 Serializable接口,实现Externalizable接口的类完全由自身来控制序列化的行为,而仅实现Serializable接口的类可以 采用默认的序列化方式 。

      对象序列化包括如下步骤:

      1) 创建一个对象输出流,它可以包装一个其他类型的目标输出流,如文件输出流;

      2) 通过对象输出流的writeObject()方法写对象。

      对象反序列化的步骤如下:

      1) 创建一个对象输入流,它可以包装一个其他类型的源输入流,如文件输入流;  

      2) 通过对象输入流的readObject()方法读取对象。

 

 

三.对象序列化和反序列化案例

      定义一个Person类,实现Serializable接口

 

import java.io.Serializable;
/*** 测试对象序列化和反序列化* @author * @version 1.0 V* @createTime */
public class Person implements Serializable {/*** 序列化ID*/private static final long serialVersionUID = -5809782578272943999L;private int age;private String name;private String sex;public int getAge() {return age;}public String getName() {return name;}public String getSex() {return sex;}public void setAge(int age) {this.age = age;}public void setName(String name) {this.name = name;}public void setSex(String sex) {this.sex = sex;}
}

 

      序列化和反序列化Person类对象

 

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.text.MessageFormat;
/*** 测试对象的序列化和反序列* @author * @version 1.0 V* @createTime */
public class TestObjSerializeAndDeserialize {public static void main(String[] args) throws Exception {SerializePerson();//序列化Person对象Person p = DeserializePerson();//反序列Perons对象System.out.println(MessageFormat.format("name={0},age={1},sex={2}",p.getName(), p.getAge(), p.getSex()));}/*** MethodName: SerializePerson * Description: 序列化Person对象* @author * @throws FileNotFoundException* @throws IOException*/private static void SerializePerson() throws FileNotFoundException,IOException {Person person = new Person();person.setName("gacl");person.setAge(25);person.setSex("男");// ObjectOutputStream 对象输出流,将Person对象存储到E盘的Person.txt文件中,完成对Person对象的序列化操作ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream(new File("E:/Person.txt")));oo.writeObject(person);System.out.println("Person对象序列化成功!");oo.close();}/*** MethodName: DeserializePerson * Description: 反序列Perons对象* @author * @return* @throws Exception* @throws IOException*/private static Person DeserializePerson() throws Exception, IOException {ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("E:/Person.txt")));Person person = (Person) ois.readObject();System.out.println("Person对象反序列化成功!");return person;}
}

 


 

 

 

转自:https://my.oschina.net/xsh1208/blog/532086

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/449205.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不可重入锁和可重入锁

不可重入锁也叫自旋锁 指当一个方法调用了锁之后,如持有本锁的另一个方法也想执行,将会进入等待。那么想要使用这个方法必须先释放锁方可调用 public class Lock{private boolean isLocked false;public synchronized void lock() throws InterruptedEx…

家长必看 父母须知孩子社交圈九要点(组图)

孩子在慢慢的长大,总要接触外面的环境、接触到更多的人,也需要自己的社交圈。那么孩子的社交圈父母要知道9点。 1、妈妈是第一个“好朋友” 孩子社交的第一步从出生就开始了。虽然小小的他躺在那里还不能说话,但是通过哭、目光接触、笑等表…

2020-4-1

题目一 页面加载图片的时候&#xff0c;可能由于各种原因导致加载失败。 为了页面的人性化&#xff0c;在失败的时候通常会使用一张给定的图片替代。 <img src"logo.gif" onerror"javascript:this.srcdefault.gif" > //上面代码本来要加载logo.gif…

NGINX 配置超时时间

一、啥时候用到 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 用来设置请求资源和服务器返回的时间&#xff0c;保证一个请求占用固定时间&#xff0c;超出后报504超时&#xff01;这…

kettle变量(param命名参数)

1、定义&#xff1a; 编辑-设置-命名参数 在当前界面下定义参数名称和缺省值。 2、引用&#xff1a;原始数据 通过${var}引用变量 输出 注&#xff1a;1、字符串在命名参数引用是需要添加单引号的&#xff0c;但位置参数是不需要进行转译&#xff1b; 2、引用变量时需要勾选替换…

Excel操作

区间范围计算 方法一:用IF函数 方法二:构建一个辅助区域&#xff0c;用VLOOKUP函数 方法一:用IF函数 在F3中输入:IF(E3>90%,5%,IF(E3>80%,4%,IF(E3>70%,3%,IF(E3>60%,2%,1%)))) 向下拖动,搞定。 示例&#xff1a; IF(BB2<0.5,"50及以下",IF(AND(BB2&g…

养心灵,才能美容颜,拥有好日子(图)

“养心&#xff0c;就是在养颜”&#xff0c;说得多好啊。我们的脸是不会说谎的镜子&#xff0c;即使再巧妙的掩饰&#xff0c;也会在脸上显露出蛛丝马迹。 一个尖刻的人&#xff0c;嘴角的纹路必然多而杂;一个工于心计的人&#xff0c;脸色必定是阴沉暗淡的;一个无知的人&…

2020-4-2

题目一 利用事件冒泡原理实现了获取td单元格内容的功能。 <!DOCTYPE html> <html> <head> <meta charset" utf-8"> <style type"text/css"> #table{ width:300px; height:100px; border:1px solid #ccc; border-c…

AGC008D K-th K

题意简述&#xff1a;给你一个长度为\(N\)的整数序列\(x\)&#xff0c;请判断是否存在一个满足下列条件的整数序列\(a\)&#xff0c;如果存在&#xff0c;请构造一种方案。 1.\(a\)的长度为\(N^2\)并且满足数字\(1,2,3,\cdots,N\)都各出现恰好\(N\)次 2.对于\(1<i<N\)&am…

(一)prometheus与grafana介绍与安装

#&#xff08;1&#xff09;prometheus介绍 prometheus是一款 强大的监控系统和时序系统 采集数据&#xff1a; 在目标主机上安装exporter, exporter组件会在目标处收集监控数据, 并暴露一个http接口供prometheus查询, prometheus通过pull的方式来采集数据; 目前exporter已经采…

男人该知道的人生感悟(图)

一、家庭篇&#xff1a; 1、孝敬自己的父母&#xff0c;男人往往没有女人心细&#xff0c;所以你要经常提醒自己&#xff0c;常回家看看&#xff0c;不要等到“子欲养而亲不待”。 2、遇到事情&#xff0c;多听听父母的意见&#xff0c;他们是这个世界上最爱你的人。 3、好好…

2020-4-3

题目一 如何让IE8和IE8以下浏览器支持HTML5 <!–[if IE]> <script src"http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]–>上面这段代码仅会在IE浏览器下运行&#xff0c;还有一点需要注意&#xff0c;在页面中…

三维人脸前期调研

多张人脸照片进行3D人脸重建一种开源方法VisualSMeshlab目前的主流是VisualSFM&#xff08;找出各张照片中的特征点&#xff0c;进行两两匹配&#xff0c;根据匹配的结果&#xff0c;利用射影定理计算得到相机位置等场景信息&#xff0c;将场景信息与原始照片结合在一起得到照片…

git 报错:was cached in the local repository, resolution will not be reattempted until the upda

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Could not resolve dependencies for project com.foreveross:gaei-syncpm:jar:0.0.1-SNAPSHOT: Failure to find com.oracle.jdbc:ojd…

6000个边缘Kubernetes节点驱动城市80万次智能停车,如何成为可能?

城市的街道因为汽车数量的增长越来越繁忙&#xff0c;对于驾车一族而言&#xff0c;在热门区域寻找停车场更是无比头痛的事情。然而与此同时&#xff0c;其实也许很多办公楼、住宅楼、酒店和公共车库中仍有许多付费停车的资源未被充分利用。 ParkBee就是这样一家为城市提供智能…

英语学习之道小谈

想学好英语&#xff0c;首先要培养对英语的兴趣。兴趣是最好的老师&#xff0c;是学习英语的巨大动力&#xff0c;有了兴趣&#xff0c;学习就会事半功倍。我们都有这样的经验&#xff1a;喜欢的事&#xff0c;就容易坚持下去&#xff1b;不喜欢的事&#xff0c;是很难坚持下去…

2020-4-4

题目一 post方式get方式提交表单的主要区别? post一般用于传递较大的数据&#xff0c;在数据传递之前会有打包操作&#xff0c;所以可能会造成数据传递数据相对较慢的情况&#xff0c;不过传输的数据都能够被正确的解析&#xff0c;不会出现类似于中文乱码的状况。通过url链接…

python 进程与线程(理论部分)

一、理论部分 一 什么是进程 进程&#xff1a;正在进行的一个过程或者说一个任务。而负责执行任务则是cpu。 举例&#xff08;单核多道&#xff0c;实现多个进程的并发执行&#xff09;&#xff1a; egon在一个时间段内有很多任务要做&#xff1a;python备课的任务&#xff0c;…

Maven : 将 Jar 安装到本地仓库和 Jar 上传到私服

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Jar的maven配置 <dependency><groupId>org.apache.thrift</groupId><artifactId>libthrift</artifactId&g…

Flink 1.7.2 dataset transformation 示例

Flink 1.7.2 dataset transformation 示例 源码 https://github.com/opensourceteams/flink-maven-scala概述 Flink transformation示例map,flatMap,filter,reduce,groupBy,reduceGroup,combineGroup,Aggregate(sum,max,min)distinct,join,join funtion,leftOuterJoin,rightOut…