源代码:
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。序列化后的信息不包含类的方法
分享到:
相关推荐
Serialize-javascript 能够序列化 JavaScript 库成含有正则表达式和功能的 JSON 包。示例:var serialize = require('serialize-javascript'); serialize({ str : 'string', num : 0, obj : {foo: ...
ajax-axios-url-form-serialize 插件
前端项目-jquery-serialize-object,serialize form fields into an object or JSON
matlab开发-serialize。从变量创建matlab代码
form-serialize-and-calculate.html
对话框序列号例程serialize
PHP序列化(serialize)格式详解,呵呵~
Jquery serialize() 中文乱码及解决方法 的文档形式 Jquery
python库,解压后可用。 资源全名:flask_serialize-1.5.2-py2.py3-none-any.whl
资源分类:Python库 所属语言:Python 使用前提:需要解压 资源全名:flask_serialize-1.0.9-py2.py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
如果表单域有很多,逐个提取很麻烦,使用这个封装好的可以整体获取,也就是能使用form-serialize库获取整体表单数据。获取的有两种返回值,一种是查询字符串,一种是对象。
Serialize and Deserialize Java 示例程序。简单来讲,它的数据格式与json类似,但是在存储时对数字、多字节字符、数组等都做了很多优化,减少了无用的字符,二进制格式,也保证不用字符化带来额外的存储空间的增加...
How can we implement trees with nodes that have > 2 children?
jquery的serialize方法把中文转化成GBK的编码方式。
实现利用serialize()函数序列化文档和鼠标画一些简单的图形的功能.
:bowl_with_spoon: ts_serialize 零依赖库,用于序列化数据。 ts_serialize可以帮助您: 将camelCase类成员转换为snake_case JSON属性以与REST API一起使用从REST API有效负载中排除内部字段将数据类型转换为内部...
TIA博途_序列化指令Serialize的具体使用方法示例
本文实例讲述了jQuery基于ajax()使用serialize()提交form数据的方法。分享给大家供大家参考,具体如下: jQuery的serialize()方法通过序列化表单值,创建URL编码文本字符串,我们就可以选择一个或多个表单元素,也...
生锈序列化注意:不推荐使用此板条箱,而推荐使用 。 尽管通过PR提出的错误修复仍将...用法将此添加到您的Cargo.toml : [ dependencies ]rustc-serialize = " 0.3 " 这到你的板条箱根: extern crate rustc_serialize;
本文导读:在jQuery中,当我们使用ajax时,常常需要拼装input数据以键值对(Key/Value)的形式发送到服务器,用JQuery的serialize方法可以轻松的完成这个工作,使用这个方法可以将表单序列化为键值对(key1=value1&...