`
xplq
  • 浏览: 90051 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

对象的串行化(Serialization)

阅读更多
本文来自 http://zhidao.baidu.com/question/20831040.html
串行化的定义

1. 什么是串行化

对象的寿命通常随着生成该对象的程序的终止而终止。有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复。我们把对象的这种能记录自己的状态以便将来再生的能力,叫做对象的持续性(persistence)。对象通过写出描述自己状态的数值来记录自己,这个过程叫对象的串行化 (Serialization)。

2. 串行化的目的

串行化的目的是为java的运行环境提供一组特性,其主要任务是写出对象实例变量的数值。来源:www.examda.com

串行化方法

在java.io包中,接口Serializable用来作为实现对象串行化的工具,只有实现了Serializable的类的对象才可以被串行化。

1. 定义一个可串行化对象

public class Student implements Serializable{
int id; //学号
String name; //姓名
int age; //年龄
String department //系别
public Student(int id,String name,int age,String department){
this.id = id;
this.name = name;
this.age = age;
this.department = department;
}
}



2. 构造对象的输入/输出流

要串行化一个对象,必须与一定的对象输入/输出流联系起来,通过对象输出流将对象状态保存下来,再通过对象输入流将对象状态恢复。

java.io包中,提供了ObjectInputStream和ObjectOutputStream将数据流功能扩展至可读写对象。在 ObjectInputStream中用readObject()方法可以直接读取一个对象,ObjectOutputStream中用 writeObject()方法可以直接将对象保存到输出流中。来源:www.examda.com
Student stu=new Student(981036,"Liu Ming",18, "CSD");
FileOutputStream fo=new FileOutputStream("data.ser");
//保存对象的状态
ObjectOutputStream so=new ObjectOutputStream(fo);
try{
so.writeObject(stu);
so.close();
}catch(IOException e )
{System.out.println(e);}
FileInputStream fi=new FileInputStream("data.ser");
ObjectInputStream si=new ObjectInputStream(fi);
//恢复对象的状态
try{
stu=(Student)si.readObject();
si.close();
}catch(IOException e )
{System.out.println(e);}

在这个例子中,我们首先定义一个类Student,实现了 Serializable接口,然后通过对象输出流的writeObject()方法将Student对象保存到文件data.ser中。之后,通过对象输入流的readObject()方法从文件data.ser中读出保存下来的Student对象。

串行化的注意事项

1.串行化能保存的元素

只能保存对象的非静态成员变量,不能保存任何的成员方法和静态的成员变量,而且串行化保存的只是变量的值,对于变量的任何修饰符,都不能保存。

2.transient关键字

对于某些类型的对象,其状态是瞬时的,这样的对象是无法保存其状态的,例如一个Thread对象,或一个FileInputStream对象,对于这些字段,我们必须用transient关键字标明

3. 定制串行化

缺省的串行化机制,对象串行化首先写入类数据和类字段的信息,然后按照名称的上升排列顺序写入其数值。如果想自己明确地控制这些数值的写入顺序和写入种类,必须定义自己的读取数据流的方式。就是在类的定义中重写writeObject()和readObject()方法。

例如可在例子中,加入重写的writeObject()和readObject()方法,对Student 类定制其串行化。

private void writeObject(ObjectOutputStream out)throws IOException
{
out.writeInt(id);
out.writeInt(age);
out.writeUTF(name);
out.writeUTF(department);
}
private void readObject(ObjectInputStream in)throws IOException
{
id=in.readInt();
age=in.readInt();
name=in.readUTF();
department=in.readUTF();
}
分享到:
评论

相关推荐

    C# 对象串行化输入输出 演示代码

    C# 提供了System.Runtime.Serialization命名空间,包含多种类和接口来支持对象串行化,如ISerializable接口和SerializableAttribute特性。 二、为什么需要对象串行化? 1. 数据持久化:将对象的状态保存到文件,...

    C#344-对象串行化源代码

    首先,C#中的对象串行化主要由System.Runtime.Serialization命名空间提供。其中包含两个主要接口:ISerializable和Serializable。ISerializable接口用于自定义串行化过程,而Serializable特性则标记类,表示该类的...

    串行化(Serialization)示范例子

    串行化是微软提供的用于对对象进行文件I/O的一种机制,该机制在框架(Frame)/文档(Document)/视图(View) 模式中得到了很好的应用。很多人对什么是串行化、怎么使对象具有串行化能力和如何使用串行化功能等问题都 不甚...

    C#图形对象的串行化实例

    在C#中,串行化主要用于保存对象的状态以便后续恢复,或者是跨进程或网络传输数据。本实例聚焦于C#图形对象的串行化,这是一个实用的技术,尤其是在游戏开发、图形界面设计或其他需要保存和恢复用户界面状态的应用中...

    java串行化详细的介绍了java串行化的概念

    - **兼容性验证**:当序列化的对象版本发生变化时,`serialVersionUID`可以帮助判断序列化文件是否可以被正确反序列化。 - **唯一性**:确保不同版本的类有不同的`serialVersionUID`值。 如果两个不同版本的类具有...

    MFC 文档串行化

    标题“MFC 文档串行化”主要涉及到两个核心概念:文档类(CDocument)和串行化(Serialization)。文档类是MFC框架的一部分,它是与用户交互的数据容器,通常继承自`CObject`,并进一步继承自`CDocument`。而串行化...

    C#对象串行化输入输出演示代码

    在C#编程中,对象串行化是一种将对象的状态转换为可以存储或传输的数据格式的过程。这通常涉及将对象的属性和字段转化为字节流,以便于保存、序列化到文件或在网络上传输,之后可以反序列化恢复为原来的对象状态。在...

    mfc 串行化的简单使用

    串行化(Serialization)是计算机科学中的一个重要概念,特别是在数据存储和传输领域。简单来说,串行化就是将对象的状态信息转换为可以存储或传输的形式的过程;而反串行化则是将存储或传输的数据还原成对象的过程...

    MFC文档的串行化与保存

    文档串行化(Serialization)是MFC中实现文件保存和加载的关键机制,它允许将文档对象的状态转换为字节流,以便于存储到磁盘或在网络上传输。下面我们将深入探讨MFC文档的串行化以及如何实现保存功能。 **1. MFC...

    串行化和图像读取显示

    在VC++(Visual C++)环境下,我们可以利用诸如`serialize`函数或第三方库如Boost.Serialization来实现串行化。这在数据持久化、网络通信以及跨进程通信中都具有广泛的应用。 接下来,我们讨论“图像显示”。在VC++...

    Visual Basic.NET 串行化参考手册

    《Visual Basic.NET 串行化参考手册》是针对使用Visual Basic.NET进行对象串行化的重要资源,它提供了全面且深入的指导,帮助开发者理解和实施对象数据的保存与加载。串行化是编程中的一个关键概念,它允许将复杂的...

    基于对话框工程的串行化-可用于保存配置

    在C++编程中,串行化(Serialization)是一种将数据对象转换为可存储或传输的形式的过程,通常用于保存程序的状态或者配置信息。在Visual Studio 2010中,开发基于对话框的应用程序时,虽然单文档(SDI)和多文档...

    Java关键字Transient与串行化

    在Java编程语言中,`transient`关键字与对象的序列化(serialization)机制密切相关,它在处理对象状态的持久化时扮演着关键角色。本文将深入探讨`transient`关键字的功能、用途以及它如何影响Java对象的序列化过程。 ...

    实例解析C++/CLI的串行化

    串行化(Serialization)是指将对象的状态信息转换为可以存储或传输的形式的过程,这个过程通常会把对象转换成字节流,便于数据的保存和传输。而反串行化(Deserialization)则是将串行化后的数据重新恢复为对象的...

    Visual Basic.NET 串行化参考手册(PDG)

    2.二进制串行化:使用System.Runtime.Serialization.Formatters.Binary命名空间中的BinaryFormatter类,将对象转换为二进制格式的数据。 实现XML串行化: 首先,你需要在要串行化的类上添加Serializable特性,表示...

    串行化保存和读取数据示例.zip

    在编程领域,串行化(Serialization)是一种将对象的状态转换为可以存储或传输的数据格式的过程。这个过程使得数据能够在不同的程序、系统甚至时间之间共享和恢复。与之相对应的是反串行化(Deserialization),它能...

    VC .net 串行化数据实例.rar

    在.NET框架中,串行化是一项关键的技术,它允许对象的状态被转换为字节流,以便存储或在网络中传输。这个“VC .net 串行化数据实例.rar”压缩包包含的是关于如何在Visual C++ .NET环境中实现数据串行化的实例代码。...

    数据串行化导读

    数据串行化(Serialization)是将对象的状态转换为可以存储或传输的形式,通常是二进制流,以便在需要时能够还原。这个过程涉及到将对象的数据成员和结构编码为字节序列,然后写入持久化的存储介质,如磁盘文件。在...

Global site tag (gtag.js) - Google Analytics