`

序列化与反序列化

    博客分类:
  • java
阅读更多

序列化是把一个对象的状态写入一个字节流的过程,它执行RMI,RMI允许一台机器上的JAVA对象调用不同机器上的JAVA对象方法,对象可以作为参数提供给那个远程方法,发送机序列化该对象并传送它,接收机执行反序列化。
序列化和反序列化的关系图表可形成包含循环引用的顺序图表。这是整个序列化的总体思想。
而Serializable接口属于支持序列化的一个接口,只有一个实现它的对象可以被序列化工具存储和回复,Serializable接口没有定义任何成员,只用来表示一个累可以被序列化,若该类可以序列化,那么它的所有子类都可以。
下面是关于序列化的一个实例:
程序名称:SerializationDemo.java
程序主题:实现对象的序列化和反序列化
程序说明:该程序由实例化一个MyClass类的对象开始,该对象有三个实例变量,类型分别为String、int、double,是希望存储和恢复的信息。

 

import java.io.*;

public class SerializationDemo{
        public static void main(String args[]){

//Object serialization
try{
 MyClass object1=new MyClass("Hello",-7,2.7e10);
 System.out.println("object1:"+object1);
 FileOutputStream fos=new FileOutputStream("serial");
 ObjectOutputStream oos=new ObjectOutputStream(fos);
 oos.writeObject(object1);
 oos.flush();
 oos.close();
 }
catch(Exception e){
 System.out.println("Exception during serialization:"+e);
 System.exit(0);
 }

//Object deserialization
try{
 MyClass object2;
 FileInputStream fis=new FileInputStream("serial");
 ObjectInputStream ois=new ObjectInputStream(fis);
 object2=(MyClass)ois.readObject();
 ois.close();
 System.out.println("object2:"+object2);
 }
catch(Exception e){
 System.out.println("Exception during deserialization:"+e);
 System.exit(0);
 }
}
}

class MyClass implements Serializable{
 String s;
 int i;
 double d;
 public MyClass(String s,int i,double d){
  this.s=s;
  this.i=i;
  this.d=d;
 }
 public String toString(){
  return "s="+s+";i="+i+";d="+d;
 }
}

 

程序运行结果:object1和object2的实例变量是一样的,输出如下:
object1:s=Hello;i=-7;d=2.7E10
object2:s=Hello;i=-7;d=2.7E10


我补充一下:

Object serialization的定义:
Object serialization 允许你将实现了Serializable接口的对象转换为字节序列,这些字节序列可以被完全存储以备以后重新生成原来的对象。 

serialization不但可以在本机做,而且可以经由网络操作(就是猫小说的RMI)。这个好处是很大的----因为它自动屏蔽了操作系统的差异,字节顺序(用Unix下的c开发过网络编程的人应该知道这个概念,我就容易在这上面犯错)等。比如,在Window平台生成一个对象并序列化之,然后通过网络传到一台Unix机器上,然后可以在这台Unix机器上正确地重构这个对象。


Object serialization主要用来支持2种主要的特性:
1。Java的RMI(remote method invocation).RMI允许象在本机上一样操作远程机器上的对象。当发送消息给远程对象时,就需要用到serializaiton机制来发送参数和接收返回直。

2。Java的JavaBeans.   Bean的状态信息通常是在设计时配置的。Bean的状态信息必须被存起来,以便当程序运行时能恢复这些状态信息。这也需要serializaiton机制。

 

二。sakulagi和rollingpig说的持久化我也说一下。
我觉得你们说的应该是英文里的persistence.但是Java语言里现在只支持lightweight persistence,就是轻量级持久化,这是通过serialization机制来实现的。

persistence是指一个对象的生命周期不由程序是否执行来决定,即使是在程序终止时这个对象也存在。它把一个serializable的对象写到磁盘(本机或其他机器上的非RAM存储器),并在程序重新调用时再读取对象到通常的RAM存储器。

为什么说Java的serialization机制实现的是lightweight persistence?因为你必须显式的序列化和反序列化程序里的对象;而不是直接由一个关键词来定义一个对象是序列化的然后由系统做相应的处理。  如果以后的Java版本出现一个新的关键字来实现这种机制,比如就是persistence,如果我用

persistence  (String s="chinaunix")

然后系统自动做猫小程序里的那些处理,那么Java就实现了persistence.

分享到:
评论

相关推荐

    C++ JSON 序列化与反序列化

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

    XML序列化与反序列化 实战

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

    Json序列化与反序列化

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

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

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

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

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

    hashtable序列化与反序列化

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

    序列化与反序列化Demo

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

    delphi序列化与反序列化

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

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

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

    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应用程序的性能和功能至关重要。

    XML文件序列化与反序列化

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

    json序列化与反序列化实例

    在.NET框架中,处理JSON序列化与反序列化的任务通常由Json.NET库完成,这是一个强大的、高性能的JSON框架。 **JSON序列化** 是将对象转换为JSON字符串的过程。这使得数据可以在不同系统之间传递,因为JSON是一种...

Global site tag (gtag.js) - Google Analytics