关于Java序列化的一些高级用法

SAR ADC和sigma delta ADC的区别 0、ADC基本概念 ADC,即analog to digital converter,模拟到数字的转换器,简称模数转换器。 为什么需要ADC?因为现实的世界中,电信号是连续的,例如心电信号,或者声音信号,这些连续的信号被称为“模拟信号”。 图1:心电信号 图2:声音信号 然而这种连续的信号是无法被计算机处理的,计算机只认识0和1组成的“数字信号“。ADC就充当了这样一个桥梁,将“模拟信号”转换为计算机能识别的“数字信号”。举个例子,当前的心电电压为1.2V(实际没有这么高),ADC可能会得 阅读详情

该说的都在注释中说完了。直接给程序吧。

package test.javaPuzzler.p5;

import java.io.*;
import java.io.ObjectInputStream.GetField;
import java.io.ObjectOutputStream.PutField;

// 转载请注明来自http://blog.youkuaiyun.com/sunxing007
// 一个类实现Serializable来表明自己可以被序列化;
// 有一点需要特别注意的是:
// 如果子类实现了Serializable,而父类没有,则父类不会被序列化;
public class SerializableObject implements Serializable {

	// 生成的序列化版本号会因为编译环境,声明的类名,成员名称和数量的变化而不同;
	// 也就是说这个版本号一定程度上记录着类的定义性的信息,如果类的定义变化了,最好重新生成版本号;
	// 如果新的代码使用了旧的版本号,则在反序列化的时候,可以兼容读取旧类的字节码而不会报错;
	private static final long serialVersionUID = 9038542591452547920L;

	public String name;
	public String password;
	// 如果你不希望某个非静态成员被序列化,可以用transient来修饰它;
	public transient int age;
	// 静态成员不会被序列化,因为序列化保存的是实例的状态信息,而静态成员是类的状态信息;
	public static int version = 1;

	public SerializableObject(String name, String password) {
		this.name = name;
		this.password = password;
	}

	// 每个类可以写一个writeObject方法,这个方法将会负责该类自身的序列化过程;
	// 比如对于敏感信息如password,可以加密之后再序列化;
	// 这个过程需要用到PutField,它可以指定哪些域会被序列化,怎么序列化(比如加密);
	// 如果没有定义这个方法,将会调用ObjectOutputStream 的 defaultWriteObject;

	// 你可以注释掉readObject方法,然后运行测试用例来测试密码是否被加密;
	private void writeObject(ObjectOutputStream out) throws IOException {
		PutField putFields = out.putFields();
		putFields.put("name", name);
		// 模拟加密密码
		putFields.put("password", "thePassword:" + password);
		out.writeFields();
	}

	// 每个类可以写一个readObject方法,该方法负责该类自身的反序列化过程;
	// 比如对序列化时加密后的密码解密;
	// 这个过程需要用到GetField,他可以具体地读取每个域;或执行解密动作等等;
	// 如果没有定义这个方法,将会调用ObjectInputStream 的 defaultReadObject;
	private void readObject(ObjectInputStream in)
			throws ClassNotFoundException, IOException {
		GetField readFields = in.readFields();
		// 读取到成员的值之后,直接赋给该域,即完成该域的反序列化;
		name = (String) readFields.get("name", "defaultName");
		// 模拟解密密码
		String encPassword = (String) readFields.get("password",
				"thePassword:defaultValue");
		password = encPassword.split(":")[1];
	}

	// 序列化
	// 主要用到ObjectOutputStream;
	public void save() throws IOException {
		FileOutputStream fout = new FileOutputStream("e:\\obj");
		ObjectOutputStream oout = new ObjectOutputStream(fout);
		oout.writeObject(this);
		oout.close();
		fout.close();
	}

	// 反序列化
	// 主要用到ObjectInputStream
	public static SerializableObject load() throws IOException,
			ClassNotFoundException {
		FileInputStream fin = new FileInputStream("e:\\obj");
		ObjectInputStream oin = new ObjectInputStream(fin);
		Object o = oin.readObject();
		return (SerializableObject) o;

	}

	@Override
	public String toString() {
		return "name: " + name + ", password: " + password;
	}

	// 测试用例
	public static void main(String[] args) throws IOException,
			ClassNotFoundException {
		SerializableObject so = new SerializableObject(
				"http://blog.youkuaiyun.com/sunxing007", "123456");
		so.save();
		System.out.println(so);
		System.out.println(SerializableObject.load());
	}

}

序列化会对单例模式不利, 因为可以通过反序列化而破坏单例. 这个时候就要请出readResolve这个方法了. 比如下面的程序:

public class Dog extends Exception {
	//private static final long serialVersionUID = -7156412195888553079L;
	public static final Dog INSTANCE = new Dog();
	private Dog() { }
	public String toString() {
		return "Woof";
	}
	// 通过readResolve, 保证反序列化的时候能完全自主地处理返回对象.
	private Object readResolve(){
            return INSTANCE;
        }
	public static void main(String[] args) throws IOException, ClassNotFoundException{
		Dog d = Dog.INSTANCE;
		ByteArrayOutputStream bro = new ByteArrayOutputStream();
		ObjectOutputStream oout = new ObjectOutputStream(bro);
		oout.writeObject(d);
		ObjectInputStream oin = new ObjectInputStream(new ByteArrayInputStream(bro.toByteArray()));
		Dog d1 = (Dog)oin.readObject();
		System.out.println(d1==d);
	}
}



[转载请注明来自http://blog.youkuaiyun.com/sunxing007]

傅里叶光学(1) 傅里叶光学,可以看作是通信理论中傅里叶变换等一系列数学思想以及系统理论与光学(主要是衍射光学)相结合的产物关于傅里叶光学的应用领域,本节介绍了成像,当然事实上不可能仅限于成像,经典的还如激光散斑的一些应用,干涉计量,还有傅里叶变换光谱学等等。最后总结一下,傅里叶光学我认为可以看做一个工具,对于任意的系统,它能给出一些数学思想与物理原理进行解释和分析,找出系统的扰动和响应的关系,或者说根据扰动和响应,来研究或者设计一个系统。 阅读详情

相关推荐

opencode完整使用指南:从安装配置到Agent式编程实战

AI编程工具正从辅助补全向智能体协作演进。编程智能体不仅理解项目全局,还能自主执行原子级重构、测试验证等工程任务,显著提升研发效能。以opencode为代表的开源终端AI编程工具,凭本地优先和灵活模型接入成为技术团队新宠。本文围绕opencode的完整使用链路展开,从Node.js环境准备、npm全局安装,到解决Windows环境变量配置问题,再到接入OpenAI、Anthropic或多模型管理平台,梳理一套标准化接入方案。同时演示VSCode插件调用、LSP语义分析及Playwright驱动的浏览器自动化

weixin_28837817的博客 319

Serializer序列化组件高级使用

Serializer序列化组件高级使用

qq_46857025的博客 329

UE4载具性能调优指南:从参数设置到实战优化

本文详细解析了UE4载具性能调优的关键技巧,从WheeledVehicle类构建到轮子参数、传动系统设置,再到物理属性与操控调校。通过实战案例分享,帮助开发者优化载具的速度、加速度等核心性能,提升游戏体验。特别适合需要精细调校载具物理特性的开发者参考。

weixin_29019241的博客 469

drf之day03,序列化常用字段类 字段参数 序列化类高级用法source 序列化类高级用法之定制序列化字段的2种方法 有关联关系表的反序列化的数据保存 反序列化之数据校验

序列化常用字段类 字段参数 序列化类高级用法source 序列化类高级用法之定制序列化字段的2种方法 有关联关系表的反序列化的数据保存 反序列化之数据校验

Yydsaoligei的博客 521

OpenEuler内核编译及替换

一、内核源码下载 在gitee上下载OpenEuler内核源码 下载地址 选择需要的内核版本源码压缩包进行下载 二、内核编译 1.解压缩 将下载好的源码进行解压 tar xvf openeuler-kernel-4.19.90-2107.1.0.tar.gz 2.清理源代码树 解压后得到一个名为kernel的内核源码文件夹,进入后执行命令 make mrproper 清理过去内核编译产生的config,第一次编译时可不执行此命令 3.生成内核配置文件.config 先将将系统原配置文件拷贝过来,原

m0_56602092的博客 2万+

XianYuAutoDeliveryX:基于闲鱼API与大模型的智能自动发货系统实践

本文详细介绍了如何利用XianYuAutoDeliveryX系统,结合闲鱼API与大语言模型,构建一个智能自动发货解决方案。该系统能实现买家付款后秒级自动发货,并通过对接ChatGPT等大模型智能回复买家咨询,有效解放卖家时间,提升虚拟商品店铺的运营效率和客户体验。

bush的博客 1012

Day 23 DRF序列化器高级用法及相关源码

Day 23 DRF序列化器高级用法及相关源码 一、修改删除接口 根据restful规范–资源操作由请求方式决定 所以目前我们需要不同不同的路由 和 视图类来实现这个功能 1. 路由的配置 # urls.py url(r'^book/$', views.Book.as_view()), # get 所有的查询 以及增加 url(r'^book/(?P<id>\d+)$', views.BookInfo.as_view()), # 单个的 删 改 查 2.CBV视图的编写 # views.

A1L__的博客 696

【编号326】全国地灾数据全国25万多个地质灾害点空间分布数据

全国地质灾害点分布数据涵盖25万多个各类灾害点信息,为灾害防治提供重要依据。通过分析灾害分布规律,可识别高风险区,指导监测预警、应急避险和基础设施建设。多地成功案例(如湖北兴山崩塌避险、重庆长寿滑坡预警、湖南"挪床行动")证明,提前预警和科学防治能有效避免人员伤亡。云南省2024年通过预警体系成功避让31起灾害,保护1342人生命安全。这些实践表明,地质灾害防治需结合科技手段与群防体系,实现早预警、早处置。

千奇百怪无奇不有 1467

深入java 序列化和反序列化基本用法

这篇文章总结一下java序列化和反序列化基础用法,序列化和反序列化注意的一些细节问题。更多的源代码请访问我的github:https://github.com/yangsheng20080808/deepIntoJava原创不易,转载请声明出处。本文分为3大部分 我们为什么需要序列化和反序列化 java序列化和反序列化基本用法 版本号对于序列化和反序列化的影响 我们为什么需要序列化和反序列化Java

yabay2208的博客 399

基于IP2369与STM32的45W双向PD移动电源设计

USB PD(Power Delivery)是一种面向高功率、智能协商的通用快充协议,其核心在于通过BMC编码在CC线上完成供电能力(PDO)动态匹配与电压/电流精准调控。IP2369作为高度集成的PD协议管理芯片,内置PHY、协议引擎与MOSFET驱动,可卸载MCU实时通信压力;而STM32F103系列凭借低功耗STOP模式与丰富外设,成为电源状态管理与用户交互的理想协处理器。该组合显著提升系统鲁棒性与能效比,适用于便携式移动电源、嵌入式备用电源及PD协议教学验证等场景。本文围绕IP2369配置电阻精度、

weixin_42608299的博客 515

毕业设计:丹麦电力电价预测预测未来24小时的电价pytorch+lstm+历史特征和价格+时间序列 电价预测模型资源 完整代码数据可直接运行

毕业设计:丹麦电力电价预测预测未来24小时的电价pytorch+lstm+历史特征和价格+时间序列 电价预测模型资源 完整代码数据可直接运行

355

java序列化层数_关于Java序列化的一些高级用法

该说的都在注释中说完了。直接给程序吧。package test.javaPuzzler.p5;import java.io.*;import java.io.ObjectInputStream.GetField;import java.io.ObjectOutputStream.PutField;// 转载请注明来自http://blog.youkuaiyun.com/sunxing007// 一个类实现Se...

weixin_35749786的博客 104

LVGL misc timer 定时器(lv_timer.c)

定时器机制是LVGL中非常重要的一项功能,它承载了LVGL的延时任务执行,周期任务执行,时序任务执行等,可以说理解定时器的设计就一定程度上理解发LVGL的任务调度机制。

Bigan(安)的博客 4729

java字符串json 序列化_json格式的字符串序列化和反序列化的一些高级用法

(1) 仅仅将指定属性对应的值序列化成字符串:var filter = {name: 'Jerry', sex: 'male', age: '10'};var jsonStr4 = JSON.stringify(filter, ['name']);console.log(jsonStr4);想参与序列化的参数名通过JSON.stringify方法的第二个参数传入。上面例子中,只有name字段及对应...

weixin_35529833的博客 242

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

java序列化和RMI

深入了解序列化“契约” 由于Java提供了良好的默认支持,实现基本的对象序列化是件比较简单的事。待序列化的Java类只需要实现Serializable接口即可。Serializable仅是一个标记接口,并不包含任何需要实现的具体方法。实现该接口只是为了声明该Java类的对象是可以被序列化的。实际的序列化和反序列化工作是通过ObjectOuputStream和ObjectInput

a343315623的博客 496

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

java 对象序列化与反序列化

对象序列化与反序列化

qq_36594985的博客 527

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Serializable java序列化

Bean Serializable Interface 的接口让BEAN可以串行化,将其变成一个可保存为以后使用的二进制流。当一个BEAN被系列化到磁盘上或者其他任何地方,其状态被保存起来,其中的属性值也不会改变。在BEAN的规范中,JSP并没有要求BEAN实现Serializable接口。但是,如果您希望自己控制您所创建的组件的serialization进程,或者您想serialize并不是标准

倾城之恋的专栏 787

Java序列化高级认识

将 Java 对象序列化为二进制文件的 Java 序列化技术是 Java 系列技术中一个较为重要的技术点,在大部分情况下,开发人员只需要了解被序列化的类需要实现 Serializable 接口,使用 ObjectInputStream 和 ObjectOutputStream 进行对象的读写。然而在有些情况下,光知道这些还远远不够,文章列举了笔者遇到的一些真实情境,它们与 Java 序列化相关,通...

weixin_30585437的博客 57

如何正确的使用Java序列化技术

zz from [url]http://blog.youkuaiyun.com/xdpper/archive/2007/03/16/1531596.aspx[/url]1 Java 序列化技术概述Java 序列化技术可以使你将一个对象的状态写入一个Byte 流里,并且可以从其它地方把该Byte 流里的数据读出来。重新构造一个相同的对象。这种机制允许你将对象通过网络进行传播,并可以随时把对...

weixin_33769125的博客 76

java 的序列化和反序列化的问题

引言 将 Java 对象序列化为二进制文件的 Java 序列化技术是 Java 系列技术中一个较为重要的技术点,在大部分情况下,开发人员只需要了解被序列化的类需要实现 Serializable 接口,使用 ObjectInputStream 和 ObjectOutputStream 进行对象的读写。然而在有些情况下,光知道这些还远远不够,文章列举了...

weixin_33763244的博客 210

Java Jackson 序列化与反序列化

测试类 @Data public abstract class Animal { private String name; } public class Elephant extends Animal{ } public class Monkey extends Animal{ } Elephant elephant = new Elephant(); elephant.setName("大象精"); Monkey monkey = new Monkey(); monkey.setN..

优快云wzl的博客 641

JAVA的序列化

Java序列化其实这个用的多不多,我觉得看公司的技术栈吧,如果用的是cloud那套,估计接触的会少点,但是也不是说没有,如果是dubbo那套的话,就多点,上次我们说Netty的编码解码的时候说到了谷歌的protoBuf,今天的话我们就来好好看看Java序列化,详细的聊聊从上面这张图我们可以看到,两个进程进行通信时候,想要发送数据,要先要把数据发送到TCP缓冲区,然后形成报文再发送出去,同样的道理,接收端也是一样。我们可以相互发送各种类型的数据,包括文本、图片、音频、视频等, 而这些数据都会以二进制序列的形式

m0_71563599的博客 1万+

Java中的序列化及序列化ID

参考转载自: 秒懂Java序列化与反序列化 Java的序列化ID的作用 1. 定义 Java的序列化:是指把Java对象转换为字节序列的过程 Java的反序列化:是指把字节序列恢复为Java对象的过程 2. 为什么需要 我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本、图片、音频、视频等, 而这些数据都会以二进制序列的形式在网络上传送。那么当两个Java进程进行通信时,能否实现进程间的对象传送呢?答案是可以的。如何做到呢?这就需要Java序列化与反序列化了。换句话说,一方面,.

三明治文鱼的博客 5841

JAVA序列化

对象序列化(object serialization)是java支持的通用机制,可以将任何对象写出到流中,并在之后将其回读。简单来说,就是可以将对象数据保存为文件,甚至可以通过网络传输,在这之后或者别的主机上恢复当前保存的数据状态。

weixin_44145526的博客 1494

【Java杂记】序列化:从Java序列化到多种序列化方式

1.序列化是什么 Java平台允许我们创建对象 但是只有当JVM运行时,这些对象才存在,也就是说对象的声明周期不回避JVM的生命周期长 但我们在硬盘上存储对象,或者通过网络传输对象的时候已经脱离了JVM,已经不是java对象了 ==> 需要一种方式:Java对象 —序列化–> 保存/传输 –反序列化–> Java对象 序列化(编码): 把对象的状态信息转化为可存储或传输的形式过程,也就是把对象转化为字节序列的过程 Java对象 –编码协议–> 字节/符序列 反序列化(解码

A minor 3010
上一篇: Java谜题畅读版之异常谜题
下一篇: Java谜题畅读版之类谜题
sunxing007
博客等级 码龄21年 628粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值