序列化与反序列化( Serializable and Deserializable)实现机制分析:
什么是序列化:通过序列化你可以将一个对象保存在文件中、数据库中,可以使得对象可以在网络上进行传送。
而这些都是通过将对象转化为字节流存储到文件中,或传输到网络的另一端;利用这些字节流可以重新恢复为原来的对象。
Java序列化具有以下特点:
1.不必关心对象字节数据的底层表示和字节序等问题,因此能够在不同平台进行传输和使用。
2.对象里面的复杂关系由由系统自动维护,里面整个对象网(深度拷贝)由系统自动完成。
3.主要支持RMI和JavaBeans。
序列化中应该注意的问题:
1.序列化即保存对象的状态等信息,在进行反序列化的时候需要找到原有的类模板重新构造原有对象,因此类是序列化和反序列化的基础。
2.默认的序列化机制会根据类文件中:字段、方法等信息生成一个serialVersionUID(如果没有定义的话,这是一个final long static字段),在进行反序列化的时候首先要比较ID是否一致否则会导致不能反序列化。为了保持
3.小心序列化可能破坏对象的单例性。
从上面的第二点我们应该谨慎将一个类实现Serializable接口,因为一旦对象是可序列化的,那么对类的任何修改都可能导致反序列化的失败。当然若在类中指定其serialVersionUID则不会出现此种问题。今日实验室就碰到了此种问题,原有的平台搭建了一个非常复杂的实验,并将实验序列化到一个文件中,由于里面涉及的类没有指定serialVersionUID,因此给后来软件的升级带来了麻烦。一旦修改里面涉及的类就会导致辛辛苦苦搭建的实验不能被反序列化从而要重新做一遍。不过网上的XStream这个工具提供了解决此问题的可能,它可以将对象序列化到一个xml文件,其中对每个对象及属性都添加了相应的标记进行说明。这样避免了Java中默认的序列化机制将对象以字节的形式进行传输或保存导致可读性差的缺点。当然XML实验文件会比原有字节文件大许多,因为添加了很多额外的标记。不过该中方法为我们平滑过渡到新的软件版本提供了方法。因为XML文件是结构化数据,因此可以针对在类中新添加的特性手动进行编辑和修改,从而过渡到符合新类文件的对象格式:
old字节实验文件-----oldXML实验文件-------新的XML实验文件------新的字节实验文件
这样便可成功过渡到新的版本上来。
XStream在Applet中使用会出现安全性异常,网上资料说是:XStream在客户机上会创建ClassLoader,具体原因还有待进一步分析。
分享到:
相关推荐
C++ JSON 序列化与反序列化 相关的博客文章见:http://blog.csdn.net/TragicGuy
Json序列化与反序列化
java 对象的序列化与反序列化 java 对象的序列化与反序列化
这是类编译后的dll动态链接库,其中含有对xml文件的序列化与反序列化操作,利用其可以实现对xml文件几乎全部的复杂操作。
可以将已知结构的XMl文件生成C#结构体代码,并将该结构体与xml文件进行互相转换
序列化与反序列化Demo
C#高级序列化与反序列化_C#高级序列化与反序列化_C#高级序列化与反序列化_C#高级序列化与反序列化
/// Json序列化与反序列化方法封装类 /// public static class JsonConvert { /// /// 序列化模型对象为Json /// /// 模型类型 /// 模型对象 /// <returns></returns> public static string GetJson(T...
比如下面的JS对象 var user=new Object(); user.name='吕洞宾'; user.friends=[{name:"铁拐李",sex:"男",friend:user},{name:"何仙姑",sex:"女",friend:user}]; 一般的解析工具都会出错 详细信息请参观 ...
了解序列化与反序列化,使用 印象笔记 打开,谢谢!
1、包含文件和二进制两种序列化的方式 2、支持类的序列化和STL容器的序列化 3、支持序列化的流自定义(示例中使用的是std::stringstream,也可以使用其他的流)
基于jquery实现的form表单的序列化与反序列化。除了基本的form元素外,增加了easyui combobox的序列化与反序列化,其它类型的如有需要可自行实现。 下拉框会怎么生成以"_autoAppText"的属性记录文本,反序列时,会...
c#对象序列化与反序列化实例c#对象序列化与反序列化实例c#对象序列化与反序列化实例c#对象序列化与反序列化实例c#对象序列化与反序列化实例c#对象序列化与反序列化实例
Java Json序列化与反序列化
java 的序列化与反序列化举例测试
json序列化与反序列化实例,希望对大家有用。
Serializable接口和Externalizable接口实现序列化和反序列化
.net 序列化与反序列化示例 使用.net 自带的xml序列化,二进制序列化,演示