对象序列化的用处:假设我们现在有个Student类,里面有属性:姓名、语文、英语和数学的成绩的数据,当需要把这个对象中的数据保存下来,你该怎么办?最容易想到的一种方法是把对象中的各个属性分别调用writeXX方法输出给指定的文件,这个方法虽然可行,但对于拥有大量属性的对象就显得不是很方便了,页容易出错。 这个时候就会使用到对象的序列化,用流方式处理对象,就不必在考虑细节问题。下面是网上看到的关于序列化的解析,很详细、很容易理解。
我们都知道,当我们new一个对象的时候,Java就会在内存中创建一个相应的对象供我们后续使用。如果我们把这个Java程序关掉的话,那么这个对象也就随着我们程序的关闭而消失,如何才能在这种情况下继续保存这个对象呢?这就是Java序列化要做的事情。简单地说,Java对象列化就是要把内存中的Java对象保存下来(持久化),以便可以在网络上传输或今后继续使用这个对象中的数据。
那么对象序列化到底做了哪些事呢?其实很简单,一个对象对于我们来说的意义其实就是对象里保存的那些数据,序列化就是把这些数据转换成二进制表示的对象流,你可以把它通过网络传输到远程,当然,也可以把这些信息保存在本地的文件里。下面给出一个最简单的Java的序列化与反序列化的例子,看懂这个例子,相信你应该也能跟我一样,大概理解这是怎么一回事了。
首先是一个Peraon类:
Person.java
- package com.lanber.serial;
-
- import java.io.Serializable;
-
- public class Person implements Serializable {
- private String name;
- private int age;
- private String sex;
- private String nationality;
-
- public Person(String _name, int _age, String _sex, String _nationality) {
- this.name = _name;
- this.age = _age;
- this.sex = _sex;
- this.nationality = _nationality;
- }
-
- public String toString() {
- return "Name:" + name + "\nAge:" + age + "\nSex:" + sex
- + "\nNationality:" + nationality + "\n\n";
- }
- }
而后我们要实例化一个Person对象,把我们实例化出来的这个对象序列化,并把序列化后的对象流保存到文件中去:
WritePerson.java
- package com.lanber.serial;
-
- import java.io.*;
-
- public class WritePerson {
-
- public static void main(String[] args) {
- try {
- ObjectOutputStream oos = new ObjectOutputStream(
- new FileOutputStream("Person.tmp"));
- Person obj = new Person("Tony", 25, "Female", "han");
- System.out.println("将Person对象写入到文件Person.tmp中...");
- oos.writeObject(obj);
- oos.close();
- System.out.println("完成!");
- } catch (Exception e) {
- System.out.println(e);
- }
-
- }
- }
这样,我们就把序列化后的二进制对象流保存到Person.tmp的文件中去了(特别要注意这里的oos.writeObject()方法,这个方法就是实现把obj对象序列化的方法)。你可以打开生成的这个文件查看,不过我们是看不懂这里面的信息的,因为这是二进制数据啊。
那我们要怎么才能看懂这些二进制数据呢?这就要用到我们的反序列化了。反序列化就是要把序列化后的二进制数据反向解析成可以正常使用的Java对象。现在让我们来把刚才的那个对象反序列化一下吧:
ReadPerson.java
- package com.lanber.serial;
-
- import java.io.*;
-
- public class ReadPerson {
- public static void main(String[] args) {
- Person obj = null;
- try {
- ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
- "Person.tmp"));
- obj = (Person) ois.readObject();
- System.out.println(obj);
- ois.close();
- } catch (Exception e) {
- System.out.println(e);
- }
- }
-
- }
分享到:
相关推荐
1.对象序列化的介绍 (1).NET支持对象序列化的几种方式 二进制序列化:对象序列化之后是二进制形式的,通过BinaryFormatter类来实现的,这个类位于System.Runtime.Serialization.Formatters.Binary命名空间下。 SOAP...
Xson是一个Java对象序列化和反序列化程序。支持Java对象到字节数组的序列化,和从字节数组到Java对象的反序列化。 Maven: <groupId>com.github.xsonorg</groupId> <artifactId>xson-core <version>1.0.1 ...
序列化的过程就是对象写入字节流和从字节流中读取对象。...对象序列化功能非常简单、强大,在RMI、Socket、JMS、EJB都有应用。对象序列化问题在网络编程中并不是最激动人心的课题,但却相当重要,具有许多实用意义。
对象序列化和反序列化流
提出了一种基于JSON的对象序列化算法,该算法通过分析JSON文法并建立对象导航图,透明地将Java对象序列化成JSON表达式,使客户端能够很好地利用JavaScript引擎来解析JSON响应,有效地解决了解析XML所造成的缺陷。
将Java对象序列化成ISO-8859-1、Base64字节流和Xml字符串三种方式。
对象序列化.ppt 对象序列化.ppt 对象序列化.ppt 对象序列化.ppt 对象序列化.ppt
在java.beans包中,有两个好东西,XMLEncoder和XMLDecoder。从XML存取对象真是太费力气啦。做了小工具类,以后可以用用了。本文介绍了这两个可以把JAVA对象序列化保存为XML文件的工具类。
c#对象序列化与反序列化实例c#对象序列化与反序列化实例c#对象序列化与反序列化实例c#对象序列化与反序列化实例c#对象序列化与反序列化实例c#对象序列化与反序列化实例
通过一个章节来讲解序列化与反序列化,对binaryformatter soapformatter xmlserializer这三种序列化的详情讲解,希望对大家有所帮助。
对象序列化TCP传输 对象序列化TCP传输 对象序列化TCP传输 对象序列化TCP传输
VS、VC++实现对象序列化保存到sqlite表blob类型字段中,包含blob字段的读取和保存,文档中有代码及说明实例。
.NET对象序列化与数据持久化.NET对象序列化与数据持久化.NET对象序列化与数据持久化.NET对象序列化与数据持久化.NET对象序列化与数据持久化.NET对象序列化与数据持久化(Q群号:152088818 本群只为有经验的.NET开发者...
java 序列化对象 MARSHALLING UNMARSHALLING
c#对象 序列化 和 反序列化 ,压缩流
实现android 对象序列化,在传递数据时可用Intent传递对象
java基础 对象序列化
对象序列化 串行化 实现java对象的保存
C#对象序列化 源代码
这是Java序列化标准规范,对于研究序列化源码能够提供指导作用,为深入研究Java序列技术奠定基础。