`
xinglongbing
  • 浏览: 149782 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

序列化与反序列化

阅读更多

序列化与反序列化( 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 序列化与反序列化

    本篇文章将深入探讨C++中JSON的序列化与反序列化。 **一、JSON序列化** 序列化是指将C++的对象转换为JSON字符串的过程,以便在网络上传输或保存到文件中。常见的C++ JSON序列化库有RapidJSON、nlohmann/json、...

    XML序列化与反序列化 实战

    XML序列化与反序列化是.NET框架中处理数据交换的重要技术,它允许我们将对象的状态转换为XML格式的数据,也可以将XML数据恢复为等效的对象。这个实战项目专注于使用C#实现这一过程,使得开发者能够方便地在XML文件和...

    Json序列化与反序列化

    总结来说,JSON序列化与反序列化是现代Web开发中不可或缺的一部分,它提供了数据交换的标准格式,使得不同语言和平台之间的数据交互变得简单高效。正确理解和使用这一技术,能够极大地提升开发效率和软件的可维护性...

    c#序列化和反序列化

    ### C#中的序列化与反序列化 #### 一、序列化概述 序列化是将对象的状态转换为可持久化的形式的过程。在计算机科学中,序列化常常用于将对象的状态保存到磁盘或其他存储媒介中,或者在网络上传输对象状态。这种技术...

    (转)客户端访问Web Service--参数类型的序列化与反序列化(二)

    在本文中,我们将深入探讨客户端访问Web Service时涉及的参数类型的序列化与反序列化,这是Web Service通信过程中的关键环节。 首先,我们要理解什么是序列化和反序列化。序列化是将对象的状态转换为可以存储或传输...

    hashtable序列化与反序列化

    本文将详细探讨标题所提及的“hashtable序列化与反序列化”,并提供一个基本的示例。 首先,让我们理解什么是序列化。序列化是将对象的状态转换为可存储或可传输的形式的过程。在Java中,对象序列化允许我们将一个...

    序列化与反序列化Demo

    序列化与反序列化是计算机科学中的重要概念,特别是在数据存储、网络通信和持久化对象等领域。简单来说,序列化是将对象的状态转换为可存储或传输的数据格式的过程,而反序列化则是将这种数据格式恢复为原来的对象...

    delphi序列化与反序列化

    本文将深入探讨Delphi中的序列化与反序列化,以及如何处理组件和结构体的序列化。 首先,让我们了解什么是序列化。序列化是指将一个对象的状态转换为可以存储或传输的数据格式的过程。这通常是一个二进制流或者XML...

    java serializable 序列化与反序列化

    Java的序列化与反序列化是Java开发中的一项重要技术,它允许我们将对象的状态转换为字节流,以便存储或在网络上传输。`Serializable`接口是Java提供的一个标记接口,用于实现对象的序列化。当一个类实现了这个接口,...

    xml文件的序列化与反序列化

    这是类编译后的dll动态链接库,其中含有对xml文件的序列化与反序列化操作,利用其可以实现对xml文件几乎全部的复杂操作。

    XmlDemoTranfer Xml序列化与反序列化

    Xml序列化与反序列化是.NET框架中一种重要的数据转换技术,主要应用于将对象的状态转换成XML格式的字符串,便于存储或传输,同时也能够将XML数据还原为对象。在C#编程中,这一功能通常通过System.Xml.Serialization...

    Java Json序列化与反序列化

    Java中的JSON(JavaScript Object Notation)序列化与反序列化是开发过程中常见且重要的操作,主要用于数据交换和存储。JSON是一种轻量级的数据交换格式,它允许我们将Java对象转换为JSON字符串,反之亦然,方便在...

    C#源码序列化与反序列化

    1. **什么是序列化与反序列化?** - **序列化**:是将对象的状态转化为可持久化的格式(如XML、JSON、二进制等),使得对象可以在不同时间点或者不同环境之间进行传输和保存。 - **反序列化**:是序列化的逆过程,...

    详细案例介绍json序列化与反序列化

    ### 详细案例介绍json序列化与反序列化 #### JSON简介 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式。它最初由Douglas Crockford提出,广泛应用于Web应用程序的数据传输中...

    JAVA对象的序列化与反序列化详细PPT课件.pptx

    Java对象的序列化和反序列化...总的来说,Java对象的序列化与反序列化是Java平台中一种强大的工具,它能够帮助开发者在多种场景下有效地处理对象数据。理解并掌握这项技术,对于提升Java应用程序的性能和功能至关重要。

    基于boost的序列化与反序列化

    在编程领域,序列化和反序列化是两个关键的概念,它们用于将对象的状态转换为可存储或可传输的格式,然后在需要时恢复为原始对象。Boost库提供了一个强大的工具——Boost.Serialization,来帮助程序员实现这个功能。...

    XML文件序列化与反序列化

    本篇文章将详细探讨XML文件的序列化与反序列化,并介绍如何读取XML文件中的指定节点。 **XML序列化** XML序列化是将对象的属性和字段转换为XML文档的过程。在.NET中,我们可以使用`XmlSerializer`类来实现这一功能...

    VB.NET XML和JSON序列化与反序列化

    在VB.NET编程环境中,XML和JSON序列化与反序列化是常见的数据处理技术,用于将对象转换为文本格式(XML或JSON),以便于存储、传输和解析。这两者都是轻量级的数据交换格式,广泛应用于Web服务和客户端应用程序之间...

Global site tag (gtag.js) - Google Analytics