JAVA语言序列化和反序列化

从KVM虚拟化到Openstack云化架构综述 目录 摘要 OpenStack的虚拟化技术 OpenStack架构介绍 Nova Swift KeyStone Neutron Glance Cinder Ceilometer Heat 摘要 这两年的工作中,接触到公有云私有云的项目还不少。起初对于Openstack的了解,仅停留在其几大组件的交互上,如Nova、Neutron、Glance等,以及对各大云厂商功能点上... 阅读详情

 

 

 

在JAVA中,一个大的应用程序需要保存很多对象的时候,由于虚拟机内存有限,(资源宝贵啊  )有时不可能所有有用的对象都放到内存中,因此,需要将不常用的对象暂时持久化的文件中,当需要这个对象时,再从文件把对象恢复到内存中,这就是所谓对象的序列化和反序列化。本文讲实现如何将对象序列化到文件,然后再从文件反序列化到对象,你会发现其实特别简单

 

先看一下对象的序列化和反序列化的关键是什么

1,首先被序列化的对象必须实现 java.io.Serializable 接口,咳~~咳~~,其实这个接口没定义任何方法

 

2,序列化时,需要用到对象输出流ObjectOutputStream ,然后通过文件输出流构造 ObjectOutputStream 对象调用writeObject写入到文件

 

3,反之,反序列化时用到对象输入流ObjectIntputStream,  然后通过文件输出流构造 ObjectIntputStream对象调用readObject加载到内存,注意,是返回万能Object类型

 

4,注意:序列化时transient变量(这个关键字的作用就是告知JAVA我不可以被序列化)和静态变量不会被序列化(关于静态变量不会序列化保留意见,本实例先不用静态变量)

 

5,也是最应该注意的,如果你先序列化对象A后序列化B,那么在反序列化的时候一定记着JAVA规定先读到的对象是先被序列化的对象,不要先接收对象B,那样会报错

 

好了,现在我们做一个实例,我们现在要序列化一个会员对象到文件里,然后再把它读出来

先创建会员类

 

接着我们开始写如何序列化和反序列化,初学认真看哦

 

 

运行结果:


序列化完毕
今天是:
Thu Oct 23 18:31:11 CST 2008
用户名: renyanwei;密码:888888;年龄:0
反序列化完毕

我们看代码总结一下,serialize方法实现了对象的序列化功能,讲对象序列化到文件,使用了文件的输出流ObjectOutputStream 的writerObject方法一次写入一个对象,对象在文件中按写入顺序存储。

deserialize方法实现反序列化,从文件将对象反序列化到内存,使用了ObjectIntputStream 的readObject方法,因为序列化对象是按照写入顺序存储的,所以在反序列化时必须按照写入顺序读取

大家看了结果就应该知道了,标明transit的实例变量是没被序列化进去的 ,呵呵

 

其实序列化的意义不止如此,不但可以将对象放到文件流,还可以放到网络流里,比如我们做的Socket程序,你不但可以发送给对方一行消息,还可以发送过去一个对象,我估计QQ就不止是把我们的消息发送到对方,应该是一个对象,里面包含了发送者的信息什么的。呵呵 有兴趣的可以做一下哈

 

 

 

 


 

这次我们讲的是控制对象的序列化和反序列化

 

控制序列化就是有选择的序列化对象,而不是把对象的所以内容都序列化,前篇我们的例子中介绍了transit变量和类变量(static)不被序列化,现在我们还有一种更为灵活的控制对象序列化和反序列方法,可以在序列化过程中储存其他非this对象包含的数据

 

我们现在再来介绍一个接口 java.io.Externalizable 。当对象实现了这个接口时,就可以灵活的控制它的序列化和反序列过程,这个接口继承了java.io.Serializable

 

Externalizable 接口定义了两个方法,writerExternal方法在序列化时被调用,可以再该方法中控制序列化内容,readExternal方法在反序列时被调用,可以在该方法中控制反序列的内容

 

好了,现在我们改写上例的UserInfo

 

改写测试类

 

执行结果

现在执行序列化方法
序列化完毕
现在执行反序列化方法
Thu Oct 23 22:18:12 CST 2008
用户名: renyanwei;密码:888888;年龄:0
反序列化完毕

 

通过一张图来看程序流程

首先,我们在序列化UserInfo对象的时候,由于这个类实现了Externalizable 接口,在writeExternal()方法里定义了哪些属性可以序列化,哪些不可以序列化,所以,对象在经过这里就把规定能被序列化的序列化保存文件,不能序列化的不处理,然后在反序列的时候自动调用readExternal()方法,根据序列顺序挨个读取进行反序列,并自动封装成对象返回,然后在测试类接收,就完成了反序列

 

认真体会下程序,相信可以很快理解序列和反序列的操作,有什么没讲明白的大伙儿可以再留言和我讨论, 呵呵 一起提高

 

【寄存器模型】二、前门访问与后门访问 1.后门访问可以更好的完成前门访问能够完成的事情:后门访问不消耗仿真时间,且消耗的运行时间也远小于前门访问的运行时间。 2.后门访问可以完成前门访问不能完成的事:对于某些特定的场景,如网络通信系统中的一些只读计数器,当要验证计数器进位归零的场景时,前门访问无法完成写寄存器操作,只能通过消耗仿真时间来使计数器到达特定的计数值。而后门访问可以直接对只读寄存器赋一个初值...... 阅读详情

相关推荐

ESP32开发进阶:1.接入文心一言

ESP32开发进阶:接入文心一言大模型,串口对话

qq_53529450的博客 1396

JAVA语言序列化反序列化一目了然(一)认识

JAVA中,一个大的应用程序需要保存很多对象的时候,由于虚拟机内存有限,(资源宝贵啊 )有时不可能所有有用的对象都放到内存中,因此,需要将不常用的对象暂时持久化的文件中,当需要这个对象时,再从文件把对象恢复到内存中,这就是所谓对象的序列化反序列化。本文讲实现如何将对象序列化到文件,然后再从文件反序列化到对象,你会发现其实特别简单 先看一下对象的序列化反序列化的关键是什么1,首先

feng_870906的专栏 665

PyTorch生成式人工智能(7)——生成对抗网络(Generative Adversarial Network, GAN)实践详解

生成对抗网络 (Generative Adversarial Network, GAN) 最早由 Ian Goodfellow 于 2014 年提出,其中生成器试图创建与真实样本无法区分的数据样本,而判别器则试图区分生成器生成的样本与真实样本。在本节中,我们将介绍 GAN 的理论基础。然后,介绍如何使用 PyTorch 从零开始构建 GAN,以便了解所有细节,深入理解 GAN 的内部工作原理,为后续讨论 GAN 的其他更高级内容奠定基础,比如生成高分辨率图像或逼真的音乐。

盼小辉丶的博客 1万+

序列化--用计算机才有的语言记录数据

序列化反序列化 1、定义: 百度百科上的定义:是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。 序列化百度百科 2、初步理解 序列化反序列化:就是将一个可序列化的Object对象用一种系统才看的懂的方式在指定文件中写入读出。计算机使用的这种方式我们看不懂,我们也没有必要看懂,我们只需要知道它写入读出的内容而已。就好像是我们在翻译官的陪同下一个外国人聊天,我们不需要知道

huangeight的博客 241

序列化

本文内容来自网络,下文有对应得网址   1,什么是序列化 把对象或者结构体从内存中变成可存储或传输的过程称之为序列化序列化是将一个对象转换成字节流(byte[],或者叫字符串,2进制串)以达到将其长期保存在内存、数据库或文件中的处理过程。它的主要目的是保存对象的状态以便以后需要的时候使用。序列化后的内容如果是为了方便以后需要的时候使用,自然是二进制序列化较好。Soap,XML,json ,p...

写给自己看的博客 4006

文本数据序列化

结巴文本分词--文本序列化处理 import jieba from sklearn.model_selection import train_test_split from keras.preprocessing.text import Tokenizer from keras.preprocessing.sequence import pad_sequences 首先对语句进行分析: x_t...

人生百态361 1967

JAVA语言序列化反序列化一目了然(二)加深

这次我们讲的是控制对象的序列化反序列化  控制序列化就是有选择的序列化对象,而不是把对象的所以内容都序列化,前篇我们的例子中介绍了transit变量类变量(static)不被序列化,现在我们还有一种更为灵活的控制对象序列化反序列方法,可以在序列化过程中储存其他非this对象包含的数据 我们现在再来介绍一个接口 java.io.Externalizable 。当对象实现了这

feng_870906的专栏 423

Java语言-52:序列化反序列化

1、概念:         1) Java序列化是指把Java对象转换为字节序列的过程;        2) 而Java反序列化是指把字节序列恢复为Java对象的过程。 2、作用:         1)实现了数据的持久化,通过序列化可以把数据永久地保存到硬盘上(通常存放在文件里);         2)利用序列化实现远程通信,即在网络上传送对象的字节序列。 3、如何实现序列化反序列化...

qq_41833394的博客 156

Java语言:难忘的对象序列化反序列化

对象的序列化对象的反序列化 对象的序列化反序列化是什么意思呢? 刚开始接触,我也有点云里雾里 不过你看啊!关键字是什么? 对象序列化啊!人家出现了两次,还不是关键字??????? 好吧!进入正题 到底什么是序列化呢? 上图 因为在互联网上,或者是说在机器上传输数据都是二进制传输,都是字节传输 所以想要传递java对象的信息,那么首先要对其进行序列化,再传递 那么为什么要传递对象呢?把对象中的信息分开传不行吗? 当然不行,这样传的话,信息之间就没有联...

日出印象 345

java 序列化理解_JAVA语言序列化反序列化(1)-理解总结

JAVA中,一个大的应用程序需要保存很多对象的时候,由于虚拟机内存有限,(资源宝贵啊 )有时不可能所有有用的对象都放到内存中,因此,需要将不常用的对象暂时持久化的文件中,当需要这个对象时,再从文件把对象恢复到内存中,这就是所谓对象的序列化反序列化。本文讲实现如何将对象序列化到文件,然后再从文件反序列化到对象,你会发现其实特别简单先看一下对象的序列化反序列化的关键是什么1,首先被序列化的对象必...

weixin_42362931的博客 78

Java编程语言-序列化反序列化

  1、序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保 存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。 2、什么情况下需要序列化 a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候; b)当你想用套接字在...

JacksonWu's Blog 130

Java语言面向对象】(86)序列化反序列化

需求:学生对象 name sex age 将一个学生对象持久化到文件中 分析:对象 ---à文件 --à输出流 字符BufferedWriter(Writer) -à写的数据肯定是字符串 对象 -à字符串 name_sex_age SaveStudent 将student.txt文件中的学生信息读取出来,并转换成一个学生对象 分析: 在保存学生时,手动将学生对象转成字符串 在读取学生时,需要手动装配数据。 存在的问题:a.需要手动处理...

FairyKunKun的博客 524

JAVA语言序列化反序列化(1)-理解总结

JAVA中,一个大的应用程序需要保存很多对象的时候,由于虚拟机内存有限,(资源宝贵啊 )有时不可能所有有用的对象都放到内存中,因此,需要将不常用的对象暂时持久化的文件中,当需要这个对象时,再从文件把对象恢复到内存中,这就是所谓对象的序列化反序列化。本文讲实现如何将对象序列化到文件,然后再从文件反序列化到对象,你会发现其实特别简单先看一下对象的序列化反序列化的关键是什么1...

weixin_34087503的博客 81

序列化反序列化

#摘要序列化反序列化几乎是工程师们每天都要面对的事情,但是要精确掌握这两个概念并不容易:一方面,它们往往作为框架的一部分出现而湮没在框架之中;另一方面,它们会以其他更容易理解的概念出现,例如加密、持久化。然而,序列化反序列化的选型却是系统设计或重构一个重要的环节,在分布式、大数据量系统设计里面更为显著。恰当的序列化协议不仅可以提高系统的通用性、强健性、安全性、优化系统性能,而且...

美团技术团队 1390

java序列化transient关键字使用小结

一、背景:Java中的对象序列化 1.对象序列化的类是有要求的,这个序列化的类必须实现一个接口Serializable,这个 接口没有任何方法声明,它是一个标识接口。 2.对象流可以将Java对象转换成二进制写入磁盘,这个过程通常叫做序列化。 并且还可以从磁盘读出完整的Java对象,而这个过程叫做反序列化。 3.序列化 ObjectOutputStream 把对象转成文件 反序列化 ...

十豆三展的博客 2360

Java开源在线考试系统怎么选?从技术选型到落地部署的完整指南

Java开源在线考试系统怎么选?本文从技术选型、核心功能、部署运维、二次开发等维度,梳理了Java开源在线考试系统的选型要点。

麦塔在线考试培训系统 351

大数据 之 Snappy

【代码】大数据 之 Snappy。

zhixingheyi_tian的博客 186

Spring AI RAG管道构建与优化

<think>我们只需要根据给定的内容生成摘要(≤150字)。给定内容较长,但核心是Spring AI RAG管道构建与优化,涉及文档加载、分割、嵌入、存储、检索、生成等。摘要应高度概括。 注意用户要求“根据以下内容,生成≤150字的文章摘要”。内容提供了代码等细节,但摘要需抓住要点。 写出摘要,字数≤150。</think>摘要:本文深入讲解Spring AI RAG管道的构建与优化,涵盖文档加载、分割、嵌入、存储、检索到生成的全流程。详细展示了多源文档加载(PDF、网页、JSON)、多种分割策略(按页、

BADAO_LIUMANG_QIZHI的博客 224

Spring WebFlux 适配达梦新方案|dm‑r2dbc:Netty 异步传输的实验性 R2DBC 驱动

dm‑r2dbc 是面向达梦 DM8 的实验性 R2DBC 驱动,混合架构:Netty 异步网络传输层 + JDBC 驱动协议编解码复用。核心思路:不去逆向达梦私有协议二进制报文,直接复用达梦 JDBC 驱动内部已经成熟的编解码逻辑,通过反射替换 JDBC 内部默认阻塞 Socket 传输实现,替换为 Netty NIO 异步通道,实现真正异步非阻塞网络 IO。

jinyuttt的专栏 297

41面向对象(高级)-抽象类

当父类的某些方法,需要声明,但是又不确定如何实现时,可以将其声明为抽象方法,那么这个类就是抽象类。

weixin_52770734的博客 379

倒向随机微分方程去噪重建图像

利用倒向随机微分方程融合进去噪算法中,进行图像重建,保留边缘、细节等信息,而不模糊。

省级-数据产权试点DID(2000-2025年).xlsx

详细介绍及样例数据:https://blog.csdn.net/T0620514/article/details/157129146

上一篇: NumberFormat 的用法
下一篇: JNDI是如何实现
aspdao
博客等级 码龄19年 22粉丝 24原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值