序列化介绍到后面,必然会开始解释其中的存储机制。这里面我想也没什么好讲的,无非是定义一种数据格式,然后按照这个格式存取罢了。
比如,字符串对象Harry会被存为 74 00 05 Harry (00 05是长度,74我想应该是L java/lang/String的简写吧,猜的。和后面的Harry Hacker对应的起来)
类标示符,则以72开头,比如下面的Employee类的完整类描述符:
72 00 08 Employee
E6 D2 86 7D AE AC 18 18 02 (一个唯一标示符,SHA的前8字节)
00 03 (对象个数)
D 00 06 salary(double的 salary对象, 和JNI的类型描述一样一样的)
L 00 07 hireDay (L出现了,具体类型在下面)
74 00 07 Ljava/util/Date; (74也是规定,分号别忘了,呵呵)
L 00 04 name
74 00 12 Ljava/lang/String;
78 (结束了)
70 (无超类)
这事第一次表示的类,如果文件中会再次使用,可以使用一种缩写版:(后面代码跟上部分代码)
40 E8 6A 00 00 00 00 00 (salary的值,double的)
73 (73为规定,后面跟 类描述符 对象数据)
71 00 7E 00 08 (71代表已经已经声明的类,后面跟的序列号,没错,序列化的序列号)
77 08 00 00 00 91 1B 4E B1 80 78 (外部存储,这个后面讨论细节)
74 00 0C Harry Hacker (name的String赋值)
这样,Employee就能被完整复原了。还有一些规定,如75为数组,70为空引用。(有一些是需要上下文解释的,代表的意义可能会不同,如71后面跟的是类描述符还是对象,70是空还是无超类等)
其中,我们可以重写private void readObject(ObjectInputStream in)还有writeObject方法来做一些适配性的动作。而且,我们可以实现External接口,来对序列化进行全权负责,只需实现接口readExternal,writeExternel就可以了。
分享到:
相关推荐
**三、序列化与反序列化的细节** 1. 复杂类型的处理:除了基本类型外,还可以序列化和反序列化自定义类、结构体以及容器(如vector、map等)。对于自定义类型,通常需要重载`operator和`operator>>`,或者使用...
3. **序列化API**: - `ObjectOutputStream`:用于对象的序列化,其`writeObject()`方法可以将对象写入流。 - `ObjectInputStream`:用于对象的反序列化,其`readObject()`方法可以从流中读取对象。 4. **非序列...
Java中,除了基本的序列化机制,还有许多第三方库如Jackson、Gson等,它们提供了更高效、更灵活的JSON序列化和反序列化功能。例如,Jackson库的`ObjectMapper`类能够方便地将Java对象转换为JSON字符串,反之亦然。 ...
3. 配置文件:许多应用程序使用XML文件来存储配置信息,序列化和反序列化可以简化读写过程。 4. 数据持久化:对象状态可以被序列化到磁盘,当需要时再反序列化恢复。 总的来说,这个实战项目提供了XML序列化和反...
综上所述,在***中实现JSON的序列化和反序列化,可以通过内置的`DataContractJsonSerializer`类或使用第三方库如***。序列化和反序列化是实现Web应用中前后端数据交互的关键技术。对于日期时间类型的处理,需要特别...
#### 三、序列化的过程 当对一个对象实现序列化时,具体会发生以下过程: 1. **对象状态的保存**:序列化会保存对象的所有实例变量的状态,但不会包括任何方法或静态变量。例如,对于一个`Box`对象,如果它有`...
在IT领域,序列化和反序列化是两个关键的概念,特别是在处理对象持久化、网络传输或数据存储时。本文将详细探讨标题所提及的“hashtable序列化与反序列化”,并提供一个基本的示例。 首先,让我们理解什么是序列化...
3. 序列化:在程序中,实例化消息对象并填充数据,然后调用相关方法将其转换为字节流。 4. 反序列化:接收字节流后,通过protobuf提供的API解析字节流并恢复为对象。 在实时大数据处理中,protobuf的高效特性使其...
本主题将详细探讨C#中的三种序列化方式:二进制序列化、SOAP序列化和XML序列化,以及如何在包含图片的数据对象中应用这些技术。 1. **二进制序列化(Binary Serialization)** 二进制序列化是最有效率的方式,因为...
Delphi社区提供了一些第三方库,如SuperObject(用于JSON序列化)和Indy(支持多种协议的网络通信,包括序列化)。这些库提供了更高级的序列化功能,可以处理复杂的数据结构和自定义类型,同时支持多种数据格式。 ...
4. **Json.NET (Newtonsoft.Json)**: 广泛使用的第三方库,支持JSON格式,可读性好,灵活性高,速度快,支持复杂类型的序列化和反序列化。 使用序列化时,需要注意以下几点: - 序列化通常只对公共字段和属性生效,...
3. 数据反序列化:相反,反序列化是将JSON字符串转换回等效的对象。在JavaScript中,使用`JSON.parse()`方法实现此操作: ```javascript let jsonString = '{"name":"John","age":30}'; let obj = JSON.parse(json...
Java反序列化是一种将已序列化的对象状态转换回对象的过程,它是Java平台中持久化数据的一种常见方式。在Java应用程序中,序列化用于保存对象的状态以便稍后恢复,或者在网络间传输对象。然而,这个过程也可能引入...
我们将详细讲解三种方法,涵盖从XML节点获取键值对(KV值)到处理对象数组和节点标签组合的反序列化。 首先,让我们理解序列化的基本概念。序列化是将对象的状态转换为可存储或传输的形式的过程。在C#中,我们可以...
3. **jackson-annotations**:这个模块包含了一组注解,用于定制序列化和反序列化的规则。`jackson-annotations-2.2.3.jar` 提供了诸如`@JsonProperty`、`@JsonIgnore`、`@JsonInclude`等注解,可以方便地控制哪些...
#### 三、序列化示例 下面通过一个简单的示例来说明如何实现序列化和反序列化: ```java import java.io.Serializable; class MyClass implements Serializable { private String s; private int i; private ...
在本项目中,“学生管理系统(序列化和反序列化)”是一个基于Java或类似编程语言实现的系统,其核心功能是有效地存储和恢复学生信息。序列化和反序列化是这个系统的关键技术,它们允许程序将对象的状态转化为可存储...
三、常见的JSON反序列化库 1. Java:Jackson、Gson、org.json等 2. Python:json模块、ujson、simplejson等 3. JavaScript:JSON.parse() 内置方法 4. .NET:Newtonsoft.Json(Json.NET) 5. PHP:json_decode 函数 ...
3. **BinaryFormatter序列化与反序列化**: - **BinaryFormatter序列化**:C#的 `System.Runtime.Serialization.Formatters.Binary.BinaryFormatter` 类提供了二进制序列化功能,它将对象转换为效率高的二进制表示...
2. commons-lang3-3.3.2.jar:Apache Commons Lang库提供了许多实用的Java语言功能,包括序列化和反序列化的辅助工具,如`SerializationUtils`类,可用于简化对象的序列化和反序列化操作。 3. commons-beanutils-...