对象的串行化(Serialization)
一、串行化的概念和目的
1.什么是串行化
对象的寿命通常随着生成该对象的程序的终止而终止。有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复。我们把对象的这种能记录自己的状态以便将来再生的能力。叫作对象的持续性(persistence)。对象通过写出描述自己状态的数值来记录自己 ,这个过程叫对象的串行化(Serialization) 。串行化的主要任务是写出对象实例变量的数值。如果交量是另一对象的引用,则引用的对象也要串行化。这个过程是递归的,串行化可能要涉及一个复杂树结构的单行化,包括原有对象、对象的对象、对象的对象的对象等等。对象所有权的层次结构称为图表(graph)。
2.串行化的目的
Java对象的单行化的目标是为Java的运行环境提供一组特性,如下所示:
1) 尽量保持对象串行化的简单扼要 ,但要提供一种途径使其可根据开发者的要求进行扩展或定制。
2) 串行化机制应严格遵守Java的对象模型 。对象的串行化状态中应该存有所有的关于种类的安全特性的信息。
3) 对象的串行化机制应支持Java的对象持续性。
4) 对象的串行化机制应有足够的 可扩展能力以支持对象的远程方法调用(RMI)。
5) 对象串行化应允许对象定义自身 的格式即其自身的数据流表示形式,可外部化接口来完成这项功能。
二、串行化方法
从JDK1.1开始,Java语言提供了对象串行化机制 ,在java.io包中,接口Serialization用来作为实现对象串行化的工具 ,只有实现了Serialization的类的对象才可以被串行化。
Serializable接口中没有任何的方法。当一个类声明要实现Serializable接口时,只是表明该类参加串行化协议,而不需要实现任何特殊的方法。下面我们通过实例介绍如何对对象进行串行化。
1.定义一个可串行化对象
一个类,如果要使其对象可以被串行化,必须实现Serializable接口。我们定义一个类Student如下:
import java.io.Serializable;
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()方法可以直接将对象保存到输出流中。
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class ObjectSer {
public static void main(String args[]) throws IOException,
ClassNotFoundException {
Student stu = new Student(981036, "LiuMing", 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);
}
stu = null;
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);
}
System.out.println("Student Info:");
System.out.println("ID:" + stu.id);
System.out.println("Name:" + stu.name);
System.out.println("Age:" + stu.age);
System.out.println("Dep:" + stu.department);
}
}
运行结果如下:
Student Info:
ID:981036
Name:LiuMing
Age:18
Dep:CSD
在这个例子中,我们首先定义了一个类Student,实现了Serializable接口 ,然后通过对象输出流的writeObject()方法将Student对象保存到文件 data.ser中 。之后,通过对家输入流的readObjcet()方法从文件data.ser中读出保存下来的Student对象 。从运行结果可以看到,通过串行化机制,可以正确地保存和恢复对象的状态。
分享到:
相关推荐
对象串行化是Java平台的一个核心特性,它允许对象的状态被保存并能够在不同的时间点或者在不同的系统间进行传输。 **一、串行化的概念和目的** 1. **串行化概念**: 当一个对象被串行化时,它的实例变量(非静态...
在 Java 中,对象串行化是通过实现 Serializable 接口来实现的。Serializable 接口是 Java 中的一个标记接口,它不包含任何方法,但它表示该类可以被串行化。要使一个类可以被串行化,需要实现 Serializable 接口并...
对象串行化是编程中一个重要的概念,尤其是在.NET框架中,C#提供了强大的支持。对象串行化是指将对象的状态转换为可以存储或传输的数据格式的过程,如XML、JSON或二进制。这个过程允许我们将对象的信息保存到磁盘、...
在C#编程中,对象串行化是一种将对象的状态转换为可以存储或传输的数据格式的过程。这通常涉及将对象的数据转换成字节流,以便在内存、文件或网络中保存和恢复。对象串行化是软件开发中的一个重要概念,尤其在持久化...
Java 串行化是Java平台中的一个重要特性,它允许对象的状态被转换成字节流,以便存储、网络传输或在不同时间点恢复。这在分布式系统、持久化存储以及跨进程通信等场景中非常常见。Java 串行化主要通过实现`java.io....
当一个对象实现了`Serializable`接口时,JVM就会认为它是可被序列化的。序列化的基本流程包括: 1. **序列化**:将对象转换成字节流。 2. **反序列化**:将字节流还原为对象。 在这个过程中,Java会根据对象的具体...
要实现C#图形对象的串行化,首先需要确保你的图形对象类标记了`Serializable`属性。例如: ```csharp [Serializable] public class GraphicalObject { public int X { get; set; } public int Y { get; set; } /...
在C#编程中,对象串行化是一种将对象的状态转换为可以存储或传输的数据格式的过程。这通常涉及将对象的属性和字段转化为字节流,以便于保存、序列化到文件或在网络上传输,之后可以反序列化恢复为原来的对象状态。在...
在Java编程语言中,`transient`关键字与对象的序列化(serialization)机制密切相关,它在处理对象状态的持久化时扮演着关键角色。本文将深入探讨`transient`关键字的功能、用途以及它如何影响Java对象的序列化过程。 ...
《Visual Basic.NET 串行化参考手册》是针对使用Visual Basic.NET进行对象串行化的重要资源,它提供了全面且深入的指导,帮助开发者理解和实施对象数据的保存与加载。串行化是编程中的一个关键概念,它允许将复杂的...
在编程领域,串行化是一种将对象的状态转换为可以存储或传输的数据格式的过程。这个过程通常涉及将数据结构或对象转换成字节流,以便在不同的时间或不同的系统之间保存和恢复这些对象。Visual Basic.NET(VB.NET)...
在编程领域,串行化(Serialization)是一种将对象的状态转换为可以存储或传输的数据格式的过程。这个过程使得数据能够在不同的程序、系统甚至时间之间共享和恢复。与之相对应的是反串行化(Deserialization),它能...
通过查看和运行这些代码,你可以学习到如何定义可串行化的类(通过实现`Serializable`接口或使用`[Serializable]`特性)、如何处理串行化异常、以及如何优化串行化过程以提高性能。 在研究这些示例时,还应关注如何...
只需给类添加Serializable属性,就可以实现串行化实 的成员。 反串行化是串行化的逆过程,数据从存储介质中读取出来,并赋给类的实例变量。 串行化/序列化:将java对象转换成某种格式(JVM定义的)的字节数组 串行...
“串行化”一词在这里可能指的是将对象转换为连续的数据流,以便存储或在网络上传输。在C#中,可以使用各种类库来实现这一点,如`System.Xml.Serialization`用于XML序列化,`System.Runtime.Serialization....
Java串行化是Java编程语言中的一个重要概念,用于将对象的状态转换为字节流,以便存储在磁盘上或在网络中传输。这个过程被称为对象的序列化,而将字节流恢复为对象的过程称为反序列化。在Java中,实现串行化的主要...
Java 序列化机制 Java 序列化是将一个对象的状态写入一个 Byte 流里,并且可以从其它...这是因为 Java 对串行化的对象进行反串行化的时候,直接从流里获取其对象数据来生成一个对象实例,而不是通过其构造函数来完成。
这是因为 Java 对串行化的对象进行反串行化的时候,直接从流里获取其对象数据来生成一个对象实例,而不是通过其构造函数来完成。 2. 在实现串行化的时候,需要注意父类的处理。如果父类没有实现串行化接口,则其...