假设有以下类:
package test;
import java.io.Serializable;
public class Bean implements Serializable{
private static final long serialVersionUID = -1124040661644314220L;
private int a;
private int b;
private String name;
private int[] ages;
public String getName() {
return name;
}
public void setAges(int[] ages) {
this.ages = ages;
}
public int[] getAges() {
return ages;
}
public void setName(String name) {
this.name = name;
}
public int getA() {
return a;
}
public int getB() {
return b;
}
public void setA(int a) {
this.a = a;
}
public void setB(int b) {
this.b = b;
}
}
构造一个这个类的对象,并设置它的变量值:
Bean bean = new Bean();
bean.setA(4);
bean.setB(5);
bean.setAges(new int[]{23,44,55});
bean.setName("Liugang");
最后序列化保存的结果如下:
下面是对其中每个字节的说明:
下面我将详细分析这个结果。在分析之前需要知道Java中的序列化格式规范,这个可以参考:stream.doc
AC ED magic
00 05 version
73 TC_OBJECT
72 TC_CLASSDESC
00 09 length of className
74 65 73 74 2E 42 65 61 6E test.Bean
F0 66 9A F9 41 98 79 94 serialVersionUID
02 implement Serializable
00 04 Number of Fields
49 I, int type
00 01 length of field name
61 a, field name
49 I, int type
00 01 length of field name
62 b, field name
5B [, array type
00 04 length of field name
61 67 65 73 ages, field name
74 TC_STRING, string type
00 02 length of field type
5B 49 [I, type name
4C L, object type
00 04 length of field name
6E 61 6D 65 field name
74 TC_STRING, string type
00 12 18, length of field type
4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B
field type, Ljava/lang/String;
78 TC_ENDBLOCKDATA
70 TC_NULL, No Super
00 00 00 04 first field value, here is a.
00 00 00 05 second value, here is b.
75 TC_ARRAY, means array
72 TC_CLASSDESC
00 02 length of type, [I
5B 49 [I
4D BA 60 26 76 EA B2 A5 serial name of [I
02 implement Serializable
00 00 number of fields
78 TC_ENDBLOCKDATA
70 TC_NULL, no super
00 00 00 03 Length of array
00 00 00 17 first number, 23
00 00 00 2C second number, 44
00 00 00 37 third number, 55
74 TC_STRING, string type
00 07 length of value
4C 69 75 67 61 6E 67 value, “Liugang”
注:
1. 78是一个终止符
2. 要想查看某个对象类型的序列号,可以到jdk/bin目录下运行:
serialver -show
3. 对于有父类的对象,父类需要也是一个可序列化的对象,即实现接口Serializable或Externalizble。然后以父类对象做同样的步骤。
- 大小: 21.4 KB
分享到:
相关推荐
Xson是一个Java对象序列化和反序列化程序。支持Java对象到字节数组的序列化,和从字节数组到Java对象的反序列化。 Maven: <groupId>com.github.xsonorg</groupId> <artifactId>xson-core <version>1.0.1 ...
### Java对象序列化标准知识点详解 #### 一、系统架构概览 **1.1 概览** Java 对象序列化是一种将Java对象的状态转换成字节流的过程,以便于在网络上传输或存储到磁盘上。Java序列化标准定义了一套规则来描述如何...
Java对象序列化与反序列化是Java编程中重要的概念,主要应用于数据持久化、网络传输以及存储等场景。本文将详细解析这两个概念及其在实际应用中的实现方式。 **一、Java对象序列化** 1. **定义**: Java对象序列化...
Java对象序列化是一种将Java对象转换为字节流的过程,以便可以存储在磁盘上、在网络上传输或在任何其他需要持久化数据的场景中使用。这个过程涉及到两个主要概念:序列化(Marshalling)和反序列化(Unmarshalling)...
Java对象序列化是Java平台的一项重要特性,它允许将对象的状态转换为字节流,以便存储、传输或恢复。在本文中,我们将深入探讨关于Java对象序列化你可能不知道的五件事情,这些知识点对于理解和优化你的Java应用程序...
Java对象的序列化和反序列化是Java编程中一项重要的技术,主要用于将对象的状态转换为字节流,以便存储或在网络上传输。这一过程对于理解Java的IO操作、持久化数据以及实现分布式通信等场景非常关键。 首先,我们来...
【JAVA对象序列化保存为XML文件的工具类】 在Java编程中,对象序列化是一种将对象的状态转换为字节流的过程,以便可以存储或在网络上传输。而在反序列化时,这个字节流又可以恢复为原来的对象。Java提供了一个方便...
Java对象序列化是一种将对象转换为字节流的过程,以便可以将其存储在磁盘上,或者在网络中进行传输。这是Java平台提供的一种功能,允许程序员将任何Java对象持久化,即将其状态保存到磁盘,或者在网络中进行传输。...
android(包括java)序列化一个对象传给php去做处理,或是接到php...//将一个对象序列化后返回byte[] String phpserialstr=new String(b); 将变量phpserialstr传给php即可. PHPSerializer中还有unserialize方法,是反序列化
Java对象序列化是Java平台提供的一种机制,允许将对象的状态转换为字节流,以便存储在磁盘上、通过网络传输或在不同时间点恢复。这个过程涉及到将一个复杂的Java对象模型转换为简单的二进制表示,使得数据可以在不同...
序列化的过程就是对象写入字节流和从字节流中读取对象。...对象序列化功能非常简单、强大,在RMI、Socket、JMS、EJB都有应用。对象序列化问题在网络编程中并不是最激动人心的课题,但却相当重要,具有许多实用意义。
Java对象序列化是一种将Java对象转换为字节流的过程,以便可以存储这些对象或通过网络进行传输。这个过程是Java平台的核心特性,它允许开发者将复杂的对象结构持久化或者在网络间进行安全通信。序列化不仅可以用于...
将java数据 序列化成PHP的格式 a:4:{s:6:"title2";s:13:"这是标题2";s:6:"title3";s:13:"这是标题3";s:5:"title";s:13:"这是标题1";s:6:"title4";s:13:"这是标题4";} 或者a:1:{i:0;a:1:{s:4:"name";s:10:"这是1321";...
Java反序列化是一种将已序列化的对象状态转换回对象的过程,它是Java平台中持久化数据的一种常见方式。在Java应用程序中,序列化用于保存对象的状态以便稍后恢复,或者在网络间传输对象。然而,这个过程也可能引入...
java 序列化和反序列化的方法 Java 序列化和反序列化是 Java 语言中的一种机制,用于将对象转换为字节流,以便在网络上传输或存储。序列化是将对象转换为字节流的过程,而反序列化是将字节流转换回对象的过程。 在...
### Java对象序列化详解 #### 一、Java对象序列化概念 Java对象序列化是指将...理解序列化文件的格式以及序列化过程中的关键步骤,有助于开发者更好地掌握Java对象序列化的细节,并能够在实践中有效地应用这些知识。
在C#中,我们可以使用.NET框架提供的`System.Runtime.Serialization.Formatters.Binary.BinaryFormatter`类来进行二进制序列化,或者使用`System.Xml.Serialization.XmlSerializer`来进行XML序列化。而在Java中,...
### Java基础:对象序列化深度解析 #### 序列化概述与目标 对象序列化是Java编程语言中的一项核心功能,旨在将对象的状态转换为字节流,以便于存储或在网络上传输。这一过程通常涉及将对象转换为二进制格式,以便...