对象序列化

Python小知识:对象序列化 Object Serialization 定义 从狭义上讲,对象序列化是指把一些内存中的对象转变成字节流,以便保存到文件或者通过网络传输。等以后再通过反序列化转变成内存中的对象。 从广义上讲,把对象转换成JSON,CSV等数据格式也被称为序列化。 序列化并不是Python特有的技术,几乎所有编程语言都有序列化技术。因为编程语言无非是一个解决问题的工具,不管用什么编程语言都要解决序列化的问题,也就是下面的场景。 场景 序列化的场景无非这几个: 1.把对象转换成JSON或XML格式,方便网络传输,通常是使用Rest API传输。 2.把对象转成字节流, 阅读详情

目录

1.1、对象序列化的概念

1.2、实现序列化和反序列化

1.3、transient关键字


1.1、对象序列化的概念

所谓的对象序列化指的是可以将在内存之中保存的对象数据(对象里面包含属性),进行二进制数据传输的一种操作,而如果要想完成这样的二进制操作,那么对象所在的类就必须实现java.io.Serializable接口。这个接口和Cloneable接口道理一样,都属于一种标识接口,表示一种能力。

范例:定义可以被序列化的类

@SuppressWarnings("serial")
class Person implements Serializable{
	private String name ;
	private int age ;
	public Person(String name,int age) {
		this.name = name ;
		this.age = age ; 
	}
	@Override
	public String toString() {
		return "姓名:" + this.name + ",年龄:" + this.age;
	}
}

以后Person类的对象(主要是里面的属性)就可以进行二进制数据的传输了。

1.2、实现序列化和反序列化

        如果要想进行对象的序列化和反序列化的手工操作,在Java之中提供了两个操作类:ObjectOutputStream、ObjectInputStream,而这两个类的继承结构、构造方法、操作方法定义如下:

ObjectOutputStream:

ObjectInputStream:

java.lang.Object

|- java.io.OutputStream

|- java.io.ObjectOutputStream

java.lang.Object

|- java.io.InputStream

|- java.io.ObjectInputStream

public ObjectOutputStream(OutputStream out) throws IOException

public ObjectInputStream(InputStream in) throws IOException

public final void writeObject(Object obj) throws IOException

public final Object readObject() throws IOException, ClassNotFoundException

范例:实现的序列化操作

public class TestDemo {
	public static void main(String[] args) throws Exception {
		Person per = new Person("张三", 20);
		ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(
				new File("D:" + File.separator + "person.ser")));
		oos.writeObject(per); // 输出对象
		oos.close();
	}
}

范例:执行反序列化操作

public class TestDemo {
	public static void main(String[] args) throws Exception {
		ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
				new File("D:" + File.separator + "person.ser")));
		Person per = (Person) ois.readObject(); // 接收对象
		ois.close();
		System.out.println(per);
	}
}

1.3、transient关键字

        默认的情况下,当一个类的对象被序列化的时候,这个类之中的所有属性都被保存下来,如果现在某些属性不希望被保存的话,那么可以使用transient进行声明。

范例:观察transient定义

private transient String name;	// 不能被序列化
private int age; 				// 可以被序列化

面试题:请解释Java序列化的作用以及实现?

        序列化操作的主要目的是为保证对象可以以二进制数据的方式进行传输,如果要想实现对象序列化,对象所在的类必须实现java.io.Serializable接口,默认情况下一个对象的所有属性都会被序列化下来,也可以使用transient关键字定义不被序列化的属性。

对象序列化技术比较,及其使用场景 序列化(Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程.这是百度百科的说明,也很浅显易懂,比如说,我有一个java对象,我想传输给远端的程序,如何传输尼?java提供了序列化接口,只要实现了Serializable接口,就可将java对象序列化成字节,然后以流的形式传输,然后在远端再反序列化成对象,这就达到了传输消息的目的.但是这种序列化存在一些缺陷,1不能跨语言,2,序列化体积大。 阅读详情

相关推荐

ContextCapture导入点云进行重建

ContextCapture导入点云进行重建

天桥飞熊的博客 1万+

十、对象序列化(object serialization)

简单概念 序列化:将对象编码成字节流 反序列化:从字节流编码中重新构建对象 序列化代理模式是重点。它可以帮助我们避免对象序列化的许多缺陷。 第74条 谨慎地实现 Serializable 接口 一个类实现了Serializable接口后,一旦被发布,就大大降低了“改变这个类的实现”的灵活性。 如果使用默认的序列化形式,这个类中私有的和包级私有的实例域都会成为导出API的一部分,打破了封装,不能隐藏实现细节。 如果使用默认的序列化形式,并改变了类的内部表示法。用这个类的旧版本序列化一个类,再用新版本反序列化,

【全部原创,全部干货】【Android、车载MCU、AIGC】 1894

多传感器标定全栈系统学习教程

无论是激光雷达(Lidar)、毫米波雷达(Radar)、相机(Camera)还是惯导(IMU),传感器之间的精确标定直接决定了系统的可靠性与性能。本文将以系统化的视角,梳理多传感器标定的核心知识体系,并分享一套覆盖全栈技术的学习路径。Calibration)是实现点云与图像融合的前提,而雷达与车辆的标定(Radar2Car)则是精准速度估计的关键。:Lidar2Car、Camera2Car的快速标定流程,标定板布置规范。:从单传感器标定入手(如相机内参),逐步过渡到多传感器联合标定。

weixin_41792788的博客 904

java 对象序列化

如果需要更复杂的序列化控制,可以定义和// 调用默认序列化方法// 进行额外处理(例如加密某些字段)// 调用默认反序列化方法// 进行额外处理(例如解密某些字段)当然我们也可以自定义序列化过程。

sjb2274540432的博客 1850

瑞芯微RK3576上手实测:8nm新U配6TOPS NPU,做AIoT项目选它还是RK3588/RK3568?

本文深度评测瑞芯微RK3576芯片在中高端AIoT项目中的表现,对比RK3588和RK3568的性能差异。RK3576采用8nm工艺,配备6TOPS NPU,在解码能力、AI推理效率和功耗控制方面表现均衡,是中端项目的黄金选择。实测数据显示其在多路视频解码和AI加速性能上优势明显,特别适合智能摄像头和工业HMI设备。

weixin_42627853的博客 717

深度强化学习:Actor-Critic、A2C、A3C

Actor-Critic算法是强化学习中常用的一种方法,policy-based,通过演员和评论员或者是策略网络和价值网络的结合进行学习

weixin_51995147的博客 1427

序列化对象

对象序列化的目标是将对象保存到磁盘中,或允许在网络中直接传输对象。对象序列 化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制 流持久地保存在磁盘上,通过网络将这种二进制流传输到另一个网络节点。其他程序 一旦获得了这种二进制流(无论是从磁盘中获取的,还是通过网络获取的),都可以 将这种二进制流恢复成原来的Java对象。 序列化的含义和意义 序列化机制允许将实现序列化的J...

weixin_42047392的博客 367

决策树简介/PPT

最近给我们组新生讲了决策树的相关知识,以下是所做的PPT,参考了网络资源。

垃圾就应该待在垃圾桶里的博客 3796

java 对象怎么序列化,java对象序列化总结

java对象序列化小结百度百科上介绍序列化是这样的:序列化 (Serialization):将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。序列化使其他代码可以查看或修改那些不序列化便无法访问的对象实例数据。确切地说,代码执行序列化需要特殊的权限:即指定了 Serializa...

weixin_39896839的博客 463

45 - Android系统源码-crosvm 实战:基于 KVM 的 Rust 安全虚拟机监控器核心技术

摘要:crosvm 是 Google 开发的基于 KVM 的轻量级虚拟机监控器(VMM),采用 Rust 语言编写,专为 ChromeOS 和 Android 设计。其核心特点包括: 安全架构:通过 Rust 的内存安全特性和多进程隔离(每个设备运行在独立沙箱进程)大幅降低攻击面 性能优化:基于 KVM 的硬件虚拟化支持,结合异步 I/O (io_uring/epoll) 实现高效设备模拟 模块化设计:清晰的 trait 抽象层(Hypervisor/Vm/Vcpu)支持跨平台扩展 Android 集成

保持专注,保持热爱 226

推荐系统[九]项目技术细节讲解z2:搜索Query理解[Term Weight、Query 改写、同义词扩写]和语义召回技术

在 pooling 方法上,我们也尝试过不同层 pooling,或者在多层上增加 attention 聚合 BERT 多层结果,效果和最后一层所有 token 做 average pooling 相当。损失函数方面,在排序阶段使用pairwise比 pointwise 损失函数的效果会更好。

丨汀、的博客 1109

C#对象反序列化与对象序列化

C#对象反序列化与对象序列化 对象序列化的介绍 1、.net支持对象序列化的几种方式 二进制序列化  SOAP序列化  XML序列化 2、几种序列化的区别 二进制格式和SOAP格式可序列化一个类型的所有可序列化字段,不管       使用二进制方式的序列化与反序列化的代码 using System; using System.Collections.Generic; usi

GaraMaps的博客 1989

【YOLOv8系列】在Windows上离线搭建YOLOv8运行环境

我们都知道,通过 pip安装YOLOv8是非常方便的,但是有时候网络环境受到限制,比如公司的工作站(无法连接网络)或者机房的教学机器等等,只能通过离线的方式安装YOLOv8;今天就来记录一下离线搭建YOLOv8运行环境的过程。并记录了遇到的问题及解决过程。

AnChenliang_1002的博客 2006

Java对象流、对象序列化与反序列化

Java对象流、对象序列化与反序列化 对象的序列化可以将一个对象的成员信息保存为一个datdatdat文件存到硬盘上,反序列化就是可以直接从该文件读该对象。 package Exp7; import java.io.*; class PersonalInfo implements Serializable { //实体类实现接口Serializable private static final long serialVersionUID = 1L; private String na

Harris-H的博客 569

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

对象的序列化和反序列化

对象序列化: 目标:将对象保存到磁盘中,或允许在网络中直接传输对象。 对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,通过网络将这种二进制流传输到另一个网络节点。其他程序一旦获得了这种二进制流,都可以将这种二进制流恢复成原来的java对象。 含义:序列化机制将实现序列化的Java对象转换成字节序列,这些字节序列可以保存在磁盘上,或通过网络...

weixin_42373873的博客 643

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

对象的序列化

对象的序列化 对象序列化: 对象序列化的定义:指把并行数据转换成串行数据的处理过程,而对象序列化(Object Serialization)是指把对象的状态数据以字节流的形式进行处理,一般用于实现完全的对象。简单地说,对象的序列化可以理解为使用I/O“对象流”类型实现的对象读

wangyanping1234的专栏 3026

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java对象序列化

1.说明所有分布式应用常常需要跨平台,跨网络,因此要求所有传的参数、返回值都必须实现序列化。而对象序列化包含序列化和反序列化二部分,序列化是把Java对象转换为字节序列的过程,反序列化是把字节序列恢复为Java对象的过程。2.用途对象序列化主要有二种用途,一个是把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中,也叫持久化对象;另一个是在网络上传送对象的字节序列,也叫网络传输对象。3.实现序...

水木年华的博客 1851

java 对象序列化要序列化那些内容

1.java的对象序列化,只保存对象的类型信息和属性类型和属性值,三部分数据。对象中的方法,不管有多少,都不会进行序列化。package com.hs.javafan; import java.io.Serializable; public class SerializableObject implements Serializable { private String name; private int age; private String address; pub

Alex的专栏 1345
上一篇: 认识反射机制
不是小桔
博客等级 码龄6年 1粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值