`
liugang594
  • 浏览: 985896 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java对象序列化格式二

阅读更多

假设有以下类:

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
分享到:
评论

相关推荐

    Java对象序列化和反序列化工具Xson.zip

    Xson是一个Java对象序列化和反序列化程序。支持Java对象到字节数组的序列化,和从字节数组到Java对象的反序列化。 Maven:  <groupId>com.github.xsonorg</groupId>  <artifactId>xson-core  <version>1.0.1 ...

    Java对象序列化标准最新版

    ### Java对象序列化标准知识点详解 #### 一、系统架构概览 **1.1 概览** Java 对象序列化是一种将Java对象的状态转换成字节流的过程,以便于在网络上传输或存储到磁盘上。Java序列化标准定义了一套规则来描述如何...

    java对象序列化和反序列化

    Java对象序列化与反序列化是Java编程中重要的概念,主要应用于数据持久化、网络传输以及存储等场景。本文将详细解析这两个概念及其在实际应用中的实现方式。 **一、Java对象序列化** 1. **定义**: Java对象序列化...

    java 对象序列化

    Java对象序列化是一种将Java对象转换为字节流的过程,以便可以存储在磁盘上、在网络上传输或在任何其他需要持久化数据的场景中使用。这个过程涉及到两个主要概念:序列化(Marshalling)和反序列化(Unmarshalling)...

    关于 Java 对象序列化您不知道的 5 件事

    Java对象序列化是Java平台的一项重要特性,它允许将对象的状态转换为字节流,以便存储、传输或恢复。在本文中,我们将深入探讨关于Java对象序列化你可能不知道的五件事情,这些知识点对于理解和优化你的Java应用程序...

    java 对象的序列化与反序列化

    Java对象的序列化和反序列化是Java编程中一项重要的技术,主要用于将对象的状态转换为字节流,以便存储或在网络上传输。这一过程对于理解Java的IO操作、持久化数据以及实现分布式通信等场景非常关键。 首先,我们来...

    JAVA对象序列化保存为XML文件的工具类

    【JAVA对象序列化保存为XML文件的工具类】 在Java编程中,对象序列化是一种将对象的状态转换为字节流的过程,以便可以存储或在网络上传输。而在反序列化时,这个字节流又可以恢复为原来的对象。Java提供了一个方便...

    java对象序列化.ppt

    Java对象序列化是一种将对象转换为字节流的过程,以便可以将其存储在磁盘上,或者在网络中进行传输。这是Java平台提供的一种功能,允许程序员将任何Java对象持久化,即将其状态保存到磁盘,或者在网络中进行传输。...

    java序列化对象传给php

    android(包括java)序列化一个对象传给php去做处理,或是接到php...//将一个对象序列化后返回byte[] String phpserialstr=new String(b); 将变量phpserialstr传给php即可. PHPSerializer中还有unserialize方法,是反序列化

    Java对象序列化的秘密

    Java对象序列化是Java平台提供的一种机制,允许将对象的状态转换为字节流,以便存储在磁盘上、通过网络传输或在不同时间点恢复。这个过程涉及到将一个复杂的Java对象模型转换为简单的二进制表示,使得数据可以在不同...

    介绍Java对象序列化使用基础

    序列化的过程就是对象写入字节流和从字节流中读取对象。...对象序列化功能非常简单、强大,在RMI、Socket、JMS、EJB都有应用。对象序列化问题在网络编程中并不是最激动人心的课题,但却相当重要,具有许多实用意义。

    java对象序列化 传输 保存

    Java对象序列化是一种将Java对象转换为字节流的过程,以便可以存储这些对象或通过网络进行传输。这个过程是Java平台的核心特性,它允许开发者将复杂的对象结构持久化或者在网络间进行安全通信。序列化不仅可以用于...

    java 序列化成PHP格式。

    将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平台的一项重要特性,自JDK 1.1开始引入。它允许开发者将Java对象的状态转换为字节数组,方便存储、持久化或在网络间传输。之后,这些字节数组可以恢复成原来的Java对象,保持其状态不变。这一...

    java序列化和反序列化的方法

    java 序列化和反序列化的方法 Java 序列化和反序列化是 Java 语言中的一种机制,用于将对象转换为字节流,以便在网络上传输或存储。序列化是将对象转换为字节流的过程,而反序列化是将字节流转换回对象的过程。 在...

    Java对象序列化

    ### Java对象序列化详解 #### 一、Java对象序列化概念 Java对象序列化是指将...理解序列化文件的格式以及序列化过程中的关键步骤,有助于开发者更好地掌握Java对象序列化的细节,并能够在实践中有效地应用这些知识。

    C#和Java的序列化反序列化

    在C#中,我们可以使用.NET框架提供的`System.Runtime.Serialization.Formatters.Binary.BinaryFormatter`类来进行二进制序列化,或者使用`System.Xml.Serialization.XmlSerializer`来进行XML序列化。而在Java中,...

Global site tag (gtag.js) - Google Analytics