源代码:
package com.serialize;
/**
* Created by IntelliJ IDEA.
* User: Zhong Gang
* Date: 9/26/11
* Time: 11:42 AM
*/
public enum Level {
INFO,
DEBUG,
ERROR
}
package com.serialize;
import java.io.Serializable;
/**
* Created by IntelliJ IDEA.
* User: Zhong Gang
* Date: 9/26/11
* Time: 11:42 AM
*/
public class BasicInfo implements Serializable{
private String city;
private String country;
public BasicInfo(String city, String country) {
this.city = city;
this.country = country;
}
public String getCity() {
return city;
}
public String getCountry() {
return country;
}
}
package com.serialize;
import java.io.Serializable;
/**
* Created by IntelliJ IDEA.
* User: Zhong Gang
* Date: 9/26/11
* Time: 11:38 AM
*/
public class Information implements Serializable{
private int number;
private Integer count;
private String name;
private Level level;
private int[] numbers;
private transient BasicInfo basicInfo;
public Information(int number, Integer count, String name, Level level,int[] numbers, BasicInfo basicInfo) {
this.number = number;
this.count = count;
this.name = name;
this.level = level;
this.numbers = numbers;
this.basicInfo = basicInfo;
}
public int getNumber() {
return number;
}
public Integer getCount() {
return count;
}
public String getName() {
return name;
}
public Level getLevel() {
return level;
}
public BasicInfo getBasicInfo() {
return basicInfo;
}
public int[] getNumbers() {
return numbers;
}
}
package com.serialize;
/**
* Created by IntelliJ IDEA.
* User: Zhong Gang
* Date: 9/26/11
* Time: 1:43 PM
*/
public class ExtendInformation extends Information {
private String description;
public ExtendInformation(int number, Integer count, String name, Level level,int[] numbers, BasicInfo basicInfo, String description) {
super(number, count, name, level,numbers, basicInfo);
this.description = description;
}
public String getDescription() {
return description;
}
}
package com.serialize;
import junit.framework.TestCase;
import java.io.*;
/**
* Created by IntelliJ IDEA.
* User: Zhong Gang
* Date: 9/26/11
* Time: 11:43 AM
*/
public class SerializeTest extends TestCase {
public void testSerializable() throws Exception {
File file = new File("D:\\information.txt");
if (!file.exists()) {
file.createNewFile();
}
BasicInfo basicInfo = new BasicInfo("Chengdu", "China");
Information information = new Information(100, Integer.valueOf("100"), "ZhongGang", Level.ERROR, new int[]{1, 2, 3, 4, 5,}, basicInfo);
ExtendInformation extendInformation = new ExtendInformation(100, Integer.valueOf("100"), "ZhongGang", Level.ERROR, new int[]{1, 2, 3, 4, 5,}, basicInfo, "Ma Ma Mi Ya");
OutputStream outputStream = new FileOutputStream(file);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
objectOutputStream.writeObject(information);
objectOutputStream.writeObject(extendInformation);
InputStream inputStream = new FileInputStream(file);
ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
Information info = (Information) objectInputStream.readObject();
assertEquals(100, info.getNumber());
assertEquals(Integer.valueOf("100"), info.getCount());
assertEquals("ZhongGang", info.getName());
assertEquals(Level.ERROR, info.getLevel());
assertEquals(5, info.getNumbers().length);
BasicInfo basic = info.getBasicInfo();
assertNull(basic);
// assertEquals("Chengdu", basic.getCity());
// assertEquals("China", basic.getCountry());
}
}
结论:
1。序列化适用的情况为当出现系统崩溃或程序运行停止等特殊情况时,为了保存类的实例到磁盘,待下次系统重启或程序再次运行时,重新构造类的实例,或都还原类的实例状态,也适用于在网络中传输类的实例,即在网络中的不同机器上还原类的实例状态。
2。为了实现序列化,需要实现Serializable接口,该接口为一标记接口,没有任何方法,实现该接口的类,表明该项类可以进行序列化与反序列化,通俗地说即是,可以将类的实例即对象转化为流或字节,或者将相应的流或字节转化为相应的对象,前者叫做序列化,而后者叫做反序列化。
3。父类实例了Serializable接口,那么它的子类不需要再次实现Serializable接口,就可以实现序列化。
4。如果某个类的某个属性为非基本类型,基本类型的封装对象,枚举或可序列化数组等对象时,如果该对象没有实现Serializable接口,即没有实例化,那么会导致NoSerialzableException,为了避免此种情况的发生,可以为该对象实现Serializable接口,或者加上transient修饰符,表明在进行序列化时,此属性不会进行序列化。
5。通过序列化保存的类的实例状态为二进制数据,其中不仅包含实例的状态值,还包含序列化号,以及类的名称等必要信息,其中的一些附加信息是为反序列化提供足够的信息。
6。通过序列化实现的功能也可以通过其它一些方式来实现,如通过xml文件等,在xml文件中以特定格式来表述类的实例状态值,这样通过分析xml文件来还原当时的类的实例状态,并且这样的实现,当在网络中进行传输时,还可以对文件进行加密处理,使用起来更加安全。
7。序列化后的信息不包含类的方法
分享到:
相关推荐
**Ajax Axios URL Form Serialize 插件详解** 在Web开发中,数据交互是不可或缺的一部分,而Ajax技术正是实现页面异步更新的关键。随着前端框架的不断发展,像Vue.js这样的库广泛使用,Axios作为一款强大的HTTP...
Serialize-javascript 能够序列化 JavaScript 库成含有正则表达式和功能的 JSON 包。示例:var serialize = require('serialize-javascript'); serialize({ str : 'string', num : 0, obj : {foo: ...
在TIA博途中,序列化指令`Serialize`是一个非常重要的功能,它允许我们将复杂的自定义数据类型(如UDT, STRUCT等)转换为基本数据类型,通常是BYTE或CHAR类型的数组。这在数据交换、存储和通信过程中特别有用,因为...
Jquery serialize() 中文乱码及解决方法 Jquery serialize() 方法在处理中文数据时,经常会出现乱码问题。这种问题的原因是 serialize() 方法自动调用了 encodeURIComponent 方法将数据编码了,从而导致中文乱码。...
本项目"前端项目-jquery-serialize-object"关注的是使用jQuery来序列化表单字段,将它们转换为JavaScript对象或JSON格式,这在提交表单数据到服务器时尤其有用。下面我们将深入探讨这一主题。 1. **jQuery 序列化...
在MATLAB中,`serialize`函数是一个非常实用的工具,用于将MATLAB的数据对象编码为字符串或二进制格式,以便存储、传输或序列化。这个功能在开发过程中非常重要,尤其是在需要保存工作进度、跨程序传递数据或者进行...
"serialize"一词在编程中通常指的是序列化操作,这里可能是特指C++中的`serialize`函数或方法,它负责将对话框中的控件和数据转换为可存储的格式。在C++中,实现序列化通常涉及到自定义的序列化和反序列化函数,这些...
如果表单域有很多,逐个提取很麻烦,使用这个封装好的可以整体获取,也就是能使用form-serialize库获取整体表单数据。获取的有两种返回值,一种是查询字符串,一种是对象。
form-serialize-and-calculate.html
`serialize`函数有两个主要形式:`void Serialize(CArchive& ar)`和`virtual void Serialize(__out_ecount_part(nCount, *pCount) void* lpData, UINT nCount, CArchive& ar)`。前者用于常规的成员变量串行化,后者...
资源分类:Python库 所属语言:Python 使用前提:需要解压 资源全名:flask_serialize-1.0.9-py2.py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
在这个“se_mouz_image.rar_serialize_序列化”的主题中,我们将深入探讨如何利用`serialize()`函数来序列化文档以及实现鼠标画图功能。 首先,我们来详细解释一下`serialize()`函数。`serialize()`是PHP内建的一个...
**前端开源库——remotedev-serialize** 在前端开发中,数据序列化是一个常见的需求,尤其是在进行跨进程或跨域通信时,如Ajax请求、Websocket传输或是存储于本地存储(如localStorage)时。`remotedev-serialize`...
《PyPI官网下载:serialize-images-0.1.1.tar.gz——深入了解Python图像序列化库》 在Python的生态系统中,PyPI(Python Package Index)是最重要的资源仓库,它为开发者提供了海量的开源库和模块,方便他们快速...
《Python库Flask-Serialize深度解析》 在Python的开发世界中,Flask框架以其轻量级、可扩展性著称,广泛应用于构建Web服务。而`flask_serialize`是针对Flask的一个扩展库,旨在简化数据序列化过程,使得在后端处理...
现在我们来详细探讨与"Raphael.JSON Raphael.Export Raphael.FreeTransform raphael.serialize"相关的知识点。 1. **Raphael.JSON** Raphael.JSON是Raphael库的一个扩展,允许用户将Raphael图形序列化为JSON格式。...
Serialize and Deserialize Java 示例程序。简单来讲,它的数据格式与json类似,但是在存储时对数字、多字节字符、数组等都做了很多优化,减少了无用的字符,二进制格式,也保证不用字符化带来额外的存储空间的增加...
jQuery库提供的.serialize()方法极大地简化了这一过程。本文将详细介绍jQuery.serialize()函数的语法以及提供简洁的实例,帮助读者掌握如何在实际项目中有效地使用这一功能。 ### jQuery.serialize()函数语法 ...
`serialize()`和`serializeArray()`是jQuery提供的一对非常实用的工具方法,主要用于处理表单数据。这两个方法在网页开发中尤其关键,因为它们能够方便地将用户在表单中输入的数据转化为适合发送到服务器的格式。 `...