java 序列化和反序列化

java序列化和反序列化 计算机中最基本的存储单位是字节 Byte, 任何数据最终都会被编码成字节序列,1byte=8bit, 一个字节等于八位,每一位都是用0 和 1 组成。在内存中,数据就是以 0 和 1 组成的二进制形式存储的,而字节数据在传输(如网络传输)或读写(如文件操作、数据库操作)时,通常以 "流"(的形式处理(即按顺序逐个字节传输 / 读写),这个流称为二进制流 (注: IO 支持的数据格式就是字节数组)。 我们平时写程序的时侯,如果要把运行中的 java 对象保存到数据库、文件或者通过网络传输,就需要把这些对象转 阅读详情

java IO流讲到序列化和反序列化,其实就是把对象写到文件中而已,它也是创建对象的一种方式

反序列化------------输入流

序列化--------------输出流

注意序列化和反序列化顺序要保持一致,先序列化然后反序列化
不是所有的对象都可以序列化,必须实现Serializable接口,
public interface Serializable {
}
它就是一个标记接口,并没有什么实现方法,
现在写个demo玩下:
import java.io.Serializable;
public class Student implements Serializable{
	private String name;
	private int age;
	private String province;
	private double salary;
	
	public Student(String name, int age, String province, double salary) {
		super();
		this.name = name;
		this.age = age;
		this.province = province;
		this.salary = salary;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getProvince() {
		return province;
	}
	public void setProvince(String province) {
		this.province = province;
	}
	public double getSalary() {
		return salary;
	}
	public void setSalary(double salary) {
		this.salary = salary;
	}
}
测试
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;
public class Demo1 {
	public static void main(String[] args) {
		 Student st = new Student("zhouguizhi",23,"江西省",1000); 
		 System.out.println("st="+st);
		 seria(st);
		 deseria();
	}
	/**
	 * 反序列化
	 */
	private static void deseria() {
		FileInputStream fis = null;
		ObjectInputStream ois = null;
		try  
		  {  
		   File file = new File("D://student.txt");  
		   fis = new FileInputStream(file);  
		   ois = new ObjectInputStream(fis);  
		   Student stu = (Student) ois.readObject();  
		   System.out.println("反序列化后的对象stu="+stu);
		   System.out.println("name = " + stu.getName());  
		   System.out.println("age = " + stu.getAge());  
		   System.out.println("province = " + stu.getProvince());  
		   System.out.println("salary = " + stu.getSalary());  
		  }  
		  catch(ClassNotFoundException e)  
		  {  
		   e.printStackTrace();  
		  }  
		  catch (IOException e)  
		  {  
		   e.printStackTrace();  
		  }finally{
			  if(fis!=null){
				  try {
					  fis.close();
				  } catch (IOException e) {
					  e.printStackTrace();
				  }
			  }
			  if(ois!=null){
				  try {
					  ois.close();
				  } catch (IOException e) {
					  e.printStackTrace();
				  }
			  }
		  }
	}
	/**
	 * 序列化
	 */
	private static void seria(Student stu) {
		if(stu!=null){
			File file = new File("D://student.txt");  
			//Student对象序列化过程  
			FileOutputStream fos = null;
			ObjectOutputStream oos = null;
			try {
				fos = new FileOutputStream(file);
				oos = new ObjectOutputStream(fos);
				oos.writeObject(stu);
				oos.flush();
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}finally{
				try {
					if(oos!=null)
					oos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}  
				try {
					if(fos!=null)
					fos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}  
			}
		}
	}
}
log日记:
st=Student@2a139a55
反序列化后的对象stu=Student@232204a1
name = zhouguizhi
age = 23
province = 江西省
salary = 1000.0

你会发现反序列化的对象上的属性值是一样的,但是对象不是同一个对象,再看下生成的文件:

现在思考下单例模式,真的安全么,如果我用序列化和反序列化出来,还能保证它对象是唯一性么,在内存中只有一个么,好像不能保证吧,至于怎么解决 不说了好像我单例模式那篇博客有讲,而且原型设计模式也会设计到这块知识
比如我现在有个需求就是我Student中的salary不想被反序列化怎么办呢?在java中有一个关键词修饰就可以transient。
private transient double salary;
我现在把属性salary不想被反序列化,再次运行看看结果:
st=Student@2a139a55
反序列化后的对象stu=Student@232204a1
name = zhouguizhi
age = 23
province = 江西省
salary = 0.0

发现没有salary只是默认初始化值,并不是跟上次一样是1000.00
总结:
序列化时,只对对象的状态进行保存,而不管对象的方法
当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口
当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化
Vue3实战:集成bpmn-js与Activiti工作流引擎的完整指南 本文详细介绍了如何在Vue3项目中集成bpmn-js流程图编辑器与Activiti工作流引擎,构建一个完整的前端流程设计器。文章重点解析了Vue3响应式系统与bpmn-js集成的核心陷阱及解决方案,并提供了属性面板配置、XML命名空间适配、撤销重做等实用功能的完整实现指南,帮助开发者高效完成工作流系统的前端开发。 阅读详情

相关推荐

arcgis select by attributes一次选多个_视频:如何基于ArcGIS与GeoDa求莫兰指数和绘制莫兰散点图?...

莫兰指数是全域莫兰指数(Global Moran's I)的简称,是澳大利亚统计学家帕特里克·阿尔弗雷德·皮尔斯·莫兰(Patrick Alfred Pierce Moran),在1950年提出的。详细介绍,如下:莫兰指数取值范围在-1.0至1.0之间。当Moran's I >0时,表示空间正相关性,其值越大,空间相关性越明显;当Moran's I <0时,表示空间负相关性...

weixin_39948247的博客 1760

Java序列化和反序列化(详解)

java序列化及可序列化讲解,代码清晰易懂。

qq_62414755的博客 4万+

三甲医院网络架构与安全建设实战

华为OceanStor] [华为OceanStor][PACS存储双活] [HIS数据库同步]患者隐私 数据脱敏 天清Web防火墙动态脱敏策略。主数据中心 --[OTV专线]-- 备数据中心。实现医疗业务网/卫生专网/互联网三网隔离。核心业务配置(华为CE6865)自动备份配置(每天02:00)安全事件响应(30分钟SLA)漏洞扫描(每周日00:00)实现医疗物联网统一接入管控。五、等保2.0合规关键配置。堡垒机登录(双因素认证)四、医疗物联网安全方案。

有小小的远大抱负 1911

【Java 基础篇】Java序列化与反序列化详解

本文详细介绍了Java序列化和反序列化的原理、使用方法和常见应用场景。通过实现接口,可以实现对象的序列化和反序列化。序列化和反序列化是一种重要的机制,可以实现对象的持久化存储、网络传输和缓存等功能。希望本文对你理解和应用Java序列化与反序列化有所帮助!

繁依Fanyi的博客 7373

保姆级教程:在爱快iKuai虚拟机里装OpenWrt旁路由,实现去广告和特殊功能

本文提供在爱快iKuai虚拟机中安装OpenWrt旁路由的详细教程,帮助用户实现去广告和特殊功能扩展。通过分步指导,包括虚拟机配置、网络设置和功能优化,打造稳定高效的家庭网络环境,特别适合软路由爱好者和网络管理员。

weixin_31364787的博客 825

量化策略分享之ST股弱转强,回测年化123%

本策略的核心是精选ST股票,国九条过滤,防止直接暴雷退市,只做ST股票的弱转强,弱转强的认定标准是前日涨停但昨日不涨停,昨日收盘价大于前一日最低价,昨日收盘价大于10日线,昨日成交量大于前一日的成交量但小于前一日成交量的10倍,股价大于1;这类股票强势,有资金介入,能获得超额收益。

qq_29301281的博客 1268

java序列化与反序列化详解

serialVersionUID - 0x0e 76 fa 9f 59 73 be c6 是16进制转换为二进制,就是生成的值transient修饰的变量不能被序列化;transient只作用于实现 Serializable 接口;transient只能用来修饰普通成员变量字段;不管有没有 transient 修饰,静态变量都不能被序列化;

pyth0zn的博客 4560

C#---第十一课:对列表的各种操作,添加、删除、排序、列表长度、获取元素的索引、FirstOrDefault()、SingleOrDefault()、last()

1.添加元素 2.删除元素 (1)删除列表中指定的元素 (2)删除列表A中所有与列表B相交的元素---常规 (3)删除列表A中所有与列表B相交的元素---lambda 3.排序(正序、倒序) 4.获取列表的最大容量(长度)、已用容量 6.获取元素在列表中的位置(index) 7.判断某元素是否在列表List中 8.获取列表中第一个元素First() & FirstOrDefault() 9.获取列表中唯一元素Single() & SingleOrDefault() 10.获取列表中最后一个元素

Alien-Hu 3625

java基础知识点2:序列化与反序列化详解

1)Serialization(序列化):将 java 对象以一连串的字节序列保存在本地磁盘中的过程,也可以说是保存 java 对象状态的过程。序列化可以将数据永久保存在磁盘上(通常保存在文件中),避免程序运行结束后对象从内存中消失,字节序列也方便在网络中传输。2)deserialization(反序列化):将保存在磁盘文件中的 java 字节序列重新转换成 java 对象称为反序列化。

m0_64355295的博客 2597

铭飞MCMS源码部署

文章目录前言一、下载铭飞源码二、部署源码1.使用IDEA打开源码2.配置tomcat环境2.1下载tomcat并测试是否可以成功启动(此处不赘述)2.2在IDEA中安装tomcat环境并配置3.添加数据库,并配置3.1新建数据库3.2 导入sql配置三、启动测试 前言 铭飞MCMS基于IDEA、tomcat和mysql的环境搭建。 提示:以下是本篇文章正文内容,下面案例可供参考 一、下载铭飞源码 gitee:https://gitee.com/mingSoft/MCMS/releases(各种版本按需下

MARS_ZORO的博客 4064

从想法到零件:手把手拆解一个汽车功能如何从PRD写到SSTS和CTS

本文详细拆解了汽车电子需求从市场文档(MRD)到零部件技术规范(CTS)的完整流程,以雨天自动关窗功能为例,展示了PRD、SSTS和CTS的编写要点与交互设计。文章重点解析了系统分解的艺术和零部件落地的精确参数要求,为汽车电子工程师提供了从概念到实现的全流程实践指南。

weixin_30300225的博客 481

Java序列化与反序列化(超详解)

序列化是什么意思?反序列化是什么意思?为什么要使用序列化?

多敲代码防脱发的博客 3268

YOLO11涨点优化:创新多尺度卷积注意力(MSCA)模块,小目标检测神器!

MSCA模块通过创新的多尺度设计,在保持计算效率的同时显著提升小目标检测能力。实验证明,在YOLOv5/v8等模型上嵌入MSCA后,mAP提升超过2%,小目标检测精度提升近4%,且计算代价增加极小。注意力机制的未来发展方向动态核尺寸:根据输入特征自适应调整卷积核大小跨模态融合:结合RGB与深度/热力图等多模态信息自监督优化:利用对比学习预训练注意力模块尝试在你的YOLO模型中插入MSCA模块,欢迎在评论区分享你的涨点结果!参考文献。

QQ_778132974的博客 470

【Java】序列化和反序列化

而这个writeString()往往是这样写的,字符串长度(不是大小)小于两个字节,就先写入一个字节的TC_STRING(16进制 74),然后调用writeUTF(),写入一个signature,这好像跟jvm有关。要使用一个类,就要先把它加载到虚拟机中,在加载完类之后,堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个class对象),这个对象就包含了完整的类的结构信息,我们可以通过这个对象看到类的结构,这个对象就像一面镜子,透过镜子可以看到类的结构,所以形象的称之为:反射。

double222222的博客 1211

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Java 序列化和反序列化

可以通过实现 readObject 方法来自定义反序列化过程。例如,可以在反序列化时对字段进行额外的验证或初始化。// 不会被默认序列化// 自定义反序列化逻辑// 默认反序列化// 手动反序列化 age// 自定义序列化逻辑// 默认序列化// 手动序列化 age@Override// 序列化// 反序列化。

qq_33807380的博客 1634

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java反序列化和PHP反序列化的区别

反序列化存在的意义是为了数据传输,类是无法直接进行传输的。通过序列化后转换为字符串格式或者JSON格式进行传输。

来日可期的博客 2355

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

java序列化和反序列化基础学习

(1)Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程;(2)**序列化:**对象序列化的最主要的用处就是在传递和保存对象的时候,保证对象的完整性和可传递性。序列化是把对象转换成有序字节流,以便在网络上传输或者保存在本地文件中。序列化后的字节流保存了Java对象的状态以及相关的描述信息。序列化机制的核心作用就是对象状态的保存与重建。

dayouzi的博客 1412

什么是Java序列化和反序列化?

一、先来说说什么是序列化和反序列化? java对象序列化的意思就是将对象的状态转换成字节流,以后可以通过这些值在生成相同状态的对象,对象序列化就是对象持久化的一种实现方法,它是将对象的属性和方法转化为一种序列化的形式用于存储和传输,反序列化就是根据这些保存的信息重建对象的过程。 总之: 序列化就是将java对象转化为字节序列的过程 反序列化就是将字节序列转换为java对象的过程 二、那么我们为什么要进行序列化呢? 当我们两个进程进行远程...

立志欲坚不欲锐,成功在久不在速度 3412

Java中的序列化和反序列化

目录 序列化和反序列化 JAVA WEB中的序列化和反序列化 对象序列化和反序列示例 序列化和反序列化 序列化 (Serialization):将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。 反序列化:从存储区中读取该数据,并将其还原为对象的过程,称为反序列化。 简单的说,序列化和反序列化就是: 把对象转换为字节序列的过程称为对象的序列化 把字节序列恢复为对象的过程称为对象的反序列化 对象序列化的用途: 把对象的字节序列永久地保

谢公子的博客 1592

JAVA序列化和反序列化

把 Java 对象转换成字节流(byte[]),以便存储到文件、数据库或通过网络传输。:把字节流还原回 Java 对象实例(通过类的构造/类信息重建对象状态)。Java 原生序列化机制基于(标记接口),通过和实现写/读对象。关键点:类如果实现,JVM 就可以把其实例序列化。用于版本兼容性检查(不同会导致默认序列化会把非transient成员字段写入字节流。开发者可以通过自定义序列化/反序列化行为 —— 这既是强大功能,也是危险来源(因为反序列化时这些方法会执行代码)。

rasssel的博客 1056

Java——序列化和反序列化

文章目录什么是序列化和反序列化序列化和反序列化的使用如何保证反序列化后对象地址一致 什么是序列化和反序列化 序列化和反序列化一直都是一种很模糊的概念,关于理论有位大佬这么说到: 把对象转换为字节序列的过程称为对象的序列化。 把字节序列恢复为对象的过程称为对象的反序列化。 参考博客:Java对象的序列化和反序列化 本篇博客对其不做过多的阐述,只是单纯的说明序列化和反序列化使用时需要注意的相关细节。 序列化和反序列化的使用 Java为了保证一个具有序列化和反序列化的能力,对其提供了一个接口java.io.S

专注写bug 1204

java反序列化的原理_Java 序列化和反序列化的底层原理

序列化和反序列化序列化是通过某种算法将存储于内存中的对象转换成可以用于持久化存储或者通信的形式的过程反序列化是将这种被持久化存储或者通信的数据通过对应解析算法还原成对象的过程,它是序列化的逆向操作为什么需要序列化前端请求后端接口数据的时候,后端需要返回 JSON 数据,这就是后端将 Java 堆中的对象序列化为了 JSON 数据传给前端,前端可以根据自身需求直接使用或者将其反序列化为 JS 对象R...

weixin_36051235的博客 1694

Java 基础之序列化和反序列化

如 JDK 内置的序列化框架、Fastjson、Hessian、Kryo 等,在序列化后的字节大小、序列化 / 反序列化耗时等方面表现不同。Java 序列化和反序列化是软件开发中的重要概念,在数据存储、网络通信和远程调用等场景中发挥着关键作用。总之,Java 序列化和反序列化在现代软件开发中发挥着至关重要的作用,它们使得数据的存储和传输变得简单和高效。总之,Java 序列化和反序列化在现代软件开发中不可或缺,但在使用过程中需注意各种问题,以确保程序的安全、稳定和高效运行。关键字等措施防御漏洞。

qq_25699299的博客 1323

Java序列化和反序列化

如果我们需要持久化 Java 对象比如将 Java 对象保存在文件中,或者在网络传输 Java 对象,这些场景都需要用到序列化。序列化:将数据结构或对象转换成可以存储或传输的形式,通常是二进制字节流,也可以是 JSON, XML 等文本格式反序列化:将在序列化过程中所生成的数据转换为原始数据结构或者对象的过程。

905

Java中的序列化和反序列化原理

在Java中,序列化是指将对象转换成字节流的过程,可以将对象保存在硬盘或者通过网络进行传输。反序列化则指将字节流转换成对象的过程,可以从硬盘中读取序列化的对象或者接收网络传输的字节流并转换为对象。序列化和反序列化的主要目的是实现对象的持久化,即使程序结束或者网络连接断开,序列化的对象仍然可以被恢复为原始的对象。

小筱在线博客 1294

【Java基础面试题001】Java中序列化和反序列化是什么?

在Java中,序列化和反序列化是用于将对象的状态的重要机制。

lklalmq的博客 838
上一篇: android 框架之基础装饰设计模式
下一篇: android框架之基础 原型设计模式
zhoushenxian
博客等级 码龄12年 453粉丝 549原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值