学习 java 序列化(Serializable )

Java基础篇-Serializable序列化详解 如果此时几个不同的服务之间要去共享同一个数据对象怎么办? 这时就要用到序列化了。以Java语言为例,我们都知道Java属于一门对象编程语言,它是与人交互的语言。但是二进制这种010101的数字属于机器语言,是与CPU做交互的。那么我们的Java对象要想被机器所理解,使其变成“二进制流”,这个转换编码的过程就叫做“序列化”。将二进制流转为Java对象的解码过程被称为“反序列化”。 阅读详情

1. 为什么要序列化?

对象的寿命通常随着生成该对象的程序的终止而终止。有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复。我们把对象的这种能记录自己的状态以便将来再生的能力。叫作对象的持续性(persistence)。对象通过写出描述自己状态的数值来记录自己 ,这个过程叫对象的序列化(Serialization) 。

简而言之:由于对象生命周期的存在;有时候希望对象具有持久性,于是就有了串行化

序列化的本质: 

   将 Java 对象序列化为二进制文件

序列化应用场景举例:

1. 两个客户端clientA 和 clientB 试图通过网络传递对象数据ObjectC。 clientA 端将对象 ObjectC 序列化为二进制数据再传给 ClientB,clientB 反序列化得到 ObjectC。

2. ... 

2. 如何实现序列化? 

   开发人员只需要将被序列化的类实现 java.io. Serializable 接口,使用 ObjectInputStream 和 ObjectOutputStream 进行对象的读写。看看JDK中对接口Serializable的说明 

public interface Serializable

类通过实现java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义。


实例

public class SerializableDemo {

    public static void main(String[] args) {

        try {
      
         
            PersonSerilz sPerson = new PersonSerilz("LiLei", 12);
            System.out.println(sPerson.toString());

            ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("/sPerson.data"));
            out.writeObject(sPerson);
            out.close();

            ObjectInputStream in = new ObjectInputStream(new FileInputStream("/sPerson.data"));
            PersonSerilz inverSPerson = (PersonSerilz) in.readObject();
            in.close();

            // 先将一个对象序列化后保存在文件中,然后又通过反序列化将对象从文件中读出来,如果打印结果一致,表示序列化成功
            System.out.println(inverSPerson.toString());

            // 将一个非序列化对象写到文件中,会怎样?会输出java.io.NotSerializableException
            // Person ordPerson = new Person("HanMeimei", 13);
            // out = new ObjectOutputStream(new FileOutputStream("ordPerson.data"));
            // out.writeObject(ordPerson);
            // out.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

参考:http://www.cnblogs.com/vicenteforever/articles/1471775.html

http://www.2cto.com/kf/201109/103111.html

Java序列化(2)-- Serializable序列化原理分析 序列化和持久化 序列化和持久化都是将对象转换成二进制数据,序列化的目的是便于传输,而持久化的目的是进行存储。持久化必须要进行序列化,而序列化不一定要进行持久化。反序列化,既是将二进制数据还原成为对象的过程。 Serializable接口 Java的序列化和反序列化,需要通过ObjectOutputStream和ObjectInputStream这两个类实现。继承自Serialable接口,表示当前类可以被ObjectOutputStream序列化,以及可以被Obj... 阅读详情

相关推荐

深入解析CycloneDDS跨域通信中的XML配置文件优化策略

本文深入解析了CycloneDDS跨域通信中XML配置文件的优化策略,重点介绍了网络接口配置、多播设置、性能调优参数及复杂场景下的配置案例。通过实战技巧和调试方法,帮助开发者在SoC环境中实现高效稳定的跨域通信,提升系统性能。

soda5的博客 688

Serializable序列化

1、序列化是干啥用的? 序列化的原本意图是希望对一个Java对象作一下“变换”,变成字节序列,这样一来方便持久化存储到磁盘,避免程序运行结束后对象就从内存里消失,另外变换成字节序列也更便于网络运输和传播,所以概念上很好理解: 序列化:把Java对象转换为字节序列。 反序列化:把字节序列恢复为原先的Java对象。而且序列化机制从某种意义上来说也弥补了平台化的一些差异,毕竟转换后的字节流可以在其他平台上进行反序列化来恢复对象。 2、对象序列化的方式? 在Java中,如果一个对象要想实现序列化,必须要实现下面

nsnsttn的博客 4814

【MMDetection3.0实战】从零构建自定义数据集训练流程

本文详细介绍了使用MMDetection3.0框架从零开始构建自定义目标检测数据集的完整训练流程。内容涵盖环境配置、COCO格式数据准备、核心代码改造、模型配置与训练策略调优,以及最终的模型测试与验证,帮助开发者快速上手并训练自己的检测模型。

l6m7n8的博客 314

Java 序列化Serializable详解

目的: 将对象转换成与平台无关的二进制流,从而可以保存到磁盘或者进行网络传输,其它程序获 得这个二进制流后可以将其还原成对象。 序列化机制可以使对象可以脱离程序的运行而对立存在。1、什么是序列化和反序列化把对象转换为字节序列的过程称为对象的序列化。把字节序列恢复为对象的过程称为对象的反序列化。2、什么情况下需要序列化 a)当你想把的内存中的对象保存到一个文件中或者数据库中时候;b)当你想用套接字在...

zhangmiaoping23的专栏 488

让 ABAP 开发更聪明的搭档:SAP Joule for Developers 与 ABAP AI Capabilities 全面实战

摘要:SAP已将生成式AI集成到ABAP开发工具中,推出Joule for Developers功能。该功能直接嵌入Eclipse开发环境,提供代码解释、生成、测试构造和遗留代码迁移等辅助功能。Joule支持ABAP Cloud项目开发,能围绕当前开发对象提供上下文相关的建议,帮助开发者高效完成应用开发与迁移任务。启用该功能需升级ADT并获取相应许可,典型应用场景包括RAP应用构建和S/4HANA迁移中的代码重构。官方资源提供了多个实践案例,帮助开发者快速上手这一AI辅助开发功能。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 492

MoveIt 运动学、运动规划、混合规划、move_group

混合规划是运动规划方法的一个术语,它将异构运动规划器结合起来,以产生更稳健或反应更快的解决方案。这种通用方法在导航领域已经非常成熟,并在导航2等流行项目中成功实施。MoveIt 的混合规划架构结合了一对全局规划器和局部规划器,它们以不同的规划速度和问题范围并行、并发运行。全局规划器的任务是解决全局运动规划问题,这与 “感知-规划-行动 ”应用中使用的规划器非常相似。所使用的规划器算法应该是完整的,因此假定其计算时间相对较慢。此外,全局规划器不要求实时安全,这意味着无法保证规划器在特定期限内找到解决方案。

机器人控制与仿真应用 2131

序列化之二进制与JSON

1.什么是序列化 我们把变量从内存中变成可存储或传输的过程称之为序列化2.为什么要序列化 根本原因:需要将变量或对象从内存中取出来进行存储或传输3.具体应用: 1)对象保存到文件或数据库 2)网络编程时对象跨平台跨语言传输,也即从windows上序列化的对象可到linux上返序列化,用c#序列化的对象可以被java反序列化。4.序列化的形式: 1)二进制序列化器BinaryFormatter,主要...

Acettest's Blogs 1万+

FANUC机器人_CRX协作机器人的开机和示教器的初始化设置基本步骤(二)

FANUC机器人_CRX协作机器人的开机和示教器的初始化设置基本步骤

Robot_PLC_HMI_Automation 2732

关于java内置序列化Serializable的学习

序列化的作用 序列化就是将存在于内存中的结构化数据(Object)进行转化为二进制,可以理解为字节流,由于其特性适用于网络的传输和保持到磁盘中,当需要时转化为结构化数据时(Object)进行反序列 关于java内置序列化Serialiable serialVersionUID的作用 用于校验序列化和反序列化是否是相同的数据结构。可以手动设置,IDE设置,不设置[^1] private ...

z1764559307的博客 225

基于Python的京东商品价格监控与降价提醒系统设计与实现

本文详细介绍了如何使用Python构建一个完整的京东商品价格监控与降价提醒系统。系统通过爬虫技术实时抓取京东商品价格信息,结合数据存储与分析,实现价格波动监控和智能降价提醒功能。文章涵盖了系统设计、技术选型、代码实现以及部署方案,为电子商务价格监控领域提供了一个实用的解决方案。关键词:Python爬虫、京东API、价格监控、降价提醒、自动化。

2201_76125261的博客 405

化工设备设计软件:PVELITE二次开发_(12).数据导入导出与兼容性

在数据导入之前,需要定义数据在PVELITE中的结构。可以通过编程接口定义字段名称和数据类型。# 导入必要的库 import pvelite # 创建PVELITE实例 pve = pvelite . PVELITE() # 定义CSV数据结构 csv_structure = {

kkchenjj的博客 1212

java基于java.io.Serializable接口的序列化方式学习

本文看下Java自带的序列化机制。

wang0907的博客 523

vue3+vite:引入tailwindcss不生效的原因,详细解决Tailwind配置没问题但就是不生效的情况,配置正确无报错但样式没有生效(包括tailwindcss在Vue2使用不生效解决方案)

vue3 tailwind使用教程以及tailwind不生效的问题,vue3+vite引入tailwindcss不生效的原因,tailwindcss配之后不生效怎么办,如何解决tailwinscss不生效的原因,Vue3项目使用tailwindcss在Vue2使用,不生效解决,如何解决使用 Tailwind CSS 后出现的样式不生效的问题?tailwindcss配之后不生效 tailwindcss不生效,为什么我的 Tailwind css 类没生效,解决使用 Tailwind 时样式不生效的问题,配置没

✅ 精选推荐文章 4128

Java学习 IO 对象序列化Serializable

public static void writeObj() throws FileNotFoundException, IOException { //将文件与文件输出流相关联 FileOutputStream fos = new FileOutputStream("C:\\Users\\悠悠华\\Desktop\\test\\obj.object"); //将文件输出流与对象输出流...

goddreamyyh的博客 240

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Java Serializable、Android Parcelable序列化学习记录

文章目录什么是序列化序列化有什么用常见的序列化协议XMLJSONProtoBuff序列化怎么用Java的SerializableSerializable接口的使用serialVersionUID对象序列化只关注非静态成员变量子类与父类的序列化关系transient关键字的使用让字段不参与序列化字段加了transient,还要序列化它Externalizable接口的使用单例模式与序列化Android的Parcelable持久化保存ParcelableSerializable 与 Parcelable的比较序

鱼蛋的博客 388

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

java序列化Serializable 学习入门

 (一)序列化作用:把内存中的对象转化为另一种形式,以供传输或存储。(二)序列化前提:(1)要序列化对象必须是可序列化的,即必须实现 Serializable 接口。(2)要序列化对象的属性也都是可序列化的。(3)要序列化对象引用的对象也必须是可序列化的,如:要序列化一个 HashMap 实例,需要把放入到HashMap中的对象也都序列化。(4)要序

gotohbu的专栏 599

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

java类序列化_Java序列化与反序列化学习序列化类实现Serializable接口

一.序列化类实现Serializable接口Serializable接口没有方法,更像是个标记。有了这个标记的Class就能被序列化机制处理。ObjectOutputStream只能对Serializable接口的类的对象进行序列化。默认情况下,ObjectOutputStream按照默认方式序列化,这种序列化方式仅仅对对象的非transient的实例变量进行序列化,而不会序列化对象的transi...

weixin_32123093的博客 344

JAVA基础-Serializable序列化学习总结

一、JAVA基础-Serializable序列化解决啥问题 1、JAVA对象要通过IO流实现数据持久化,或者读写到硬盘必须要序列化,如果不序列化会抛出 java.io.NotSerializableException,JAVA实现序列化的方式有两种,实现 Serializable(不需要任何代码) 接口或者 Externalizable (需要写2个空方法)。 二、JAVA序列...

weixin_30764883的博客 77

Java零基础学习 Serializable - 序列化和反序列化

一、概念 序列化:把对象转换为字节序列的过程称为对象的序列化。 反序列化:把字节序列恢复为对象的过程称为对象的反序列化。 (1)什么情况下需要序列化 想把的内存中的对象状态保存到一个文件中或者数据库中时候 想用套接字在网络上传送对象的时候 想通过RMI传输对象的时候 二、实现序列化 实现Serializable接口即可 import java.io.Serializable; public class FlyPig implements Serializable { //private s

圈池 296

java集合学习之List(一)序列化Serializable接口

今天看了下了ArrayList的实现的源码,引申出来一点关于序列化,Random类,Atomic(Long)类,还有LinkedList的一些知识。  首先ArrayList继承了AbstractList类,实现了List,RandomAccess,Cloneable以及Serializable接口。  下面先来看一下Serializable接口,即序列化接口:  首先看一下什么

妈的小可爱 1万+

学习笔记---Java中的序列化 Serializable

Java 序列化(Serializable) Java 提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据、有关对象的类型和信息和存储在对象中数据的类型。 将序列化对象写入文件之后,可以从文件中读取出来,并且对它进行反序列化,也就是说,对象的类型信息、对象的数据还有对象中的数据类型可以用来在内存中新建对象。 整个过程都是 JVM 独立的,在一个平台上序列化的对象可以在另一个完全不同的平台上反序列化该对象。 类 ObjectOutputStream 和 Obj

m0_46219348的博客 242

Java学习笔记-serializable序列化和生成 serialVersionUID 的设置

看代码时,发现开发写的很多的对象都继承了一个base类,那这个类最终又实现了Serializable接口。 这到底是啥? 序列化,到底是什么? 我百度了一圈,根据自己的理解,其实序列化,就是把我们的java对象进行一种“流操作”,这种操作让我们的对象更方便传输。 反序列化,就是把“流”转化成对象,是一种反向的过程。 如何使用呢? 所有的对象(也就是类)实现Serializable接口 这种序列化,一般是在进行远程调用的时候进行使用。 测试代码: public class...

一片蓝蓝的云 669

JAVA学习笔记(三十一)- 对象序列化Serializable

序列化Serializableimport java.io.Serializable;/* * Student类,实体类 * 实现Serializable接口,表示可以被序列化 */ public class Student implements Serializable { private static final long serialVersionUID = 37730745793

陆讯 1473

Java进阶学习笔记(十)Serializable 序列化和反序列化,serialVersionUID的意义

基本抄 Java 之 Serializable 序列化和反序列化的概念,作用的通俗易懂的解释 遇到这个 Java Serializable 序列化这个接口,我们可能会有如下的问题 a,什么叫序列化和反序列化 b,作用。为啥要实现这个 Serializable 接口,也就是为啥要序列化 c,serialVersionUID 这个的值到底是在怎么设置的,有什么用。有的是1L,有的是一长串数字,迷惑ing。 我刚刚见到这个关键字 Serializable 的时候,就有如上的这么些问题。 在处理这个问题之前,你要

TUTsmile的博客 663

学习笔记:serializable接口实现Java对象序列化

Java对象序列化的解释:Java的对象序列化是指将那些实现了Serializable接口的对象转换成一个字符序列,并能够在以后将这个字节序列完全恢复为原来的对象。这一过程甚至可通过网络进行,这意味着序列化机制能自动弥补不同操作系统之间的差异。 只要对象实现了Serializable接口。实现序列化的部分原因如下:1、将对象的状态保存在存储媒体中以便可以在以后重新创建出完全相同的副本;2...

dnstsjz35970的博客 135
上一篇: Java 内存模型
下一篇: java 规则引擎 drools框架
cuidiwhere
博客等级 码龄19年 133粉丝 102原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值