`

对象序列化与反序列化

阅读更多
关键词: 序列化,反序列化,例子

序列化简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),虽然你可以用你自己的各种各样的方法来保 存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。

反序列化正好相反,就是将保存的对象读出来,实例为对象。

下面是一个完整而形象的例子:
package com.zakisoft.se;

/**
 * 对象序列化与反序列化
 *
 */
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

/* 需要持久化的类
 * 要想使类支持对象序列化,只需要实现Serializable接口
 */
class Person implements Serializable {

	private static final long serialVersionUID = 3456126674259028540L;
	/* 属性 */
	private String id;
	private String password;
	private String name;
	private int age;
	// 如果不想对某些属性进行序列化,则需加上transient修饰符
	private transient String sex;

	/* setter和getter方法 */
	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	/* 覆盖toString方法 */
	public String toString() {
		return "对象信息:" + id + " " + password + " " + name + " " + age + " "
				+ sex;
	}

}

/*
 * 实现了对象序列化和反序列化的类
 */
public class SeriObject {

	/**
	 * 序列化
	 * 
	 * @param person
	 *            对象名
	 * @param file
	 *            指定文件
	 */
	public void writePerson(Person person, String file) {
		try {
			// 对象输出流,指向指定文件
			ObjectOutputStream out = new ObjectOutputStream(
					new FileOutputStream(file));
			out.writeObject(person);// 将对象写入文件
			out.flush();// 清空
			out.close();// 关闭
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

	/**
	 * 反序列化
	 * 
	 * @param file
	 *            指定文件
	 */
	public void readPerson(String file) {
		try {
			// 对象输入流,来源于指定文件
			ObjectInputStream in = new ObjectInputStream(new FileInputStream(
					file));
			Object o = in.readObject();// 将对象从文件读出
			in.close();// 关闭
			if (o != null) {
				if (o instanceof Person)
					System.out.println(o.toString());
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		/*
		 * 测试代码
		 */
		Person person = new Person();
		person.setId("aaa");
		person.setPassword("bbb");
		person.setName("张三");
		person.setAge(20);
		person.setSex("男");

		SeriObject so = new SeriObject();
		so.writePerson(person, "person.txt");
		so.readPerson("person.txt");
	}

}
分享到:
评论

相关推荐

    C#对象序列化与反序列化

    ### C#对象序列化与反序列化 #### 1. 对象序列化的介绍 ##### (1).NET支持对象序列化的几种方式 .NET框架提供了多种序列化机制,它们各自有不同的应用场景和特点。 - **二进制序列化**: - **定义**:二进制...

    c#对象序列化与反序列化实例

    在C#编程中,对象序列化和反序列化是至关重要的技术,它们允许开发者将复杂的对象状态转换为可存储或可传输的数据格式,如XML...以上就是关于C#对象序列化与反序列化的基本知识,以及如何在实践中应用这些概念的实例。

    Java中对象序列化与反序列化详解

    本文将深入探讨Java中的对象序列化与反序列化的概念、原理、实现方法以及相关的注意事项。 **一、对象序列化的概念和作用** 对象序列化是将一个Java对象转换成字节流的过程,这个字节流可以存储在磁盘上,也可以在...

    C#对象序列化反序列化保存与读取和对象直接保存与读取

    2. **对象序列化与反序列化**: 序列化是将对象转换为可存储或传输的形式,如字节流或文本,而反序列化则是将这些形式恢复为原始对象。C#中的`System.Runtime.Serialization`命名空间提供了多种序列化工具,如`...

    java对象序列化和反序列化

    Java对象序列化与反序列化是Java编程中重要的概念,主要应用于数据持久化、网络传输以及存储等场景。本文将详细解析这两个概念及其在实际应用中的实现方式。 **一、Java对象序列化** 1. **定义**: Java对象序列化...

    C# 对象序列化与反序列化

    通过一个章节来讲解序列化与反序列化,对binaryformatter soapformatter xmlserializer这三种序列化的详情讲解,希望对大家有所帮助。

    JSON工具,JS中JSON对象的序列化与反序列化

    比如下面的JS对象 var user=new Object(); user.name='吕洞宾'; user.friends=[{name:"铁拐李",sex:"男",friend:user},{name:"何仙姑",sex:"女",friend:user}]; 一般的解析工具都会出错 详细信息请参观 ...

    基于C#+XML实现的对象序列化与反序列化的程序例子代码

    本篇将详细讲解如何利用C#和XML来实现对象的序列化与反序列化。 首先,对象序列化是指将一个对象的状态转换为可以存储或传输的数据格式,如XML、JSON或二进制。在C#中,我们可以使用System.Xml.Serialization命名...

    java 对象的序列化与反序列化

    Java对象的序列化和反序列化是Java编程中一项重要的技术,主要用于将对象的状态转换为字节流,以便存储或在网络上传输。这一过程对于理解Java的IO操作、持久化数据以及实现分布式通信等场景非常关键。 首先,我们来...

    Java对象序列化和反序列化工具Xson.zip

    Xson是一个Java对象序列化和反序列化程序。支持Java对象到字节数组的序列化,和从字节数组到Java对象的反序列化。 Maven:  <groupId>com.github.xsonorg</groupId>  <artifactId>xson-core  <version>1.0.1 ...

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

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

    c#序列化和反序列化

    ### C#中的序列化与反序列化 ...序列化与反序列化是C#中非常重要的概念,它们在数据持久化、对象传输等方面发挥着重要作用。通过理解并正确应用这些技术,我们可以更加高效地管理和使用对象的状态。

    XML序列化与反序列化 实战

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

    对象的序列化与反序列化

    ### 对象的序列化与反序列化 #### 概述 序列化与反序列化是计算机科学领域中一种重要的技术手段,主要用于将对象的状态转换为字节流的形式存储或者在网络中传输,之后再将这些字节流恢复为原始对象的过程。在Java...

    Android-Android上的Java对象反序列化

    一、Java对象序列化与反序列化 1. **序列化**: 序列化是将Java对象转换为字节流的过程,以便于存储或传输。通过实现`java.io.Serializable`接口,一个Java对象可以获得序列化的能力。序列化不仅可以保存对象的状态...

    java对象序列化与反序列化的默认格式和json格式使用示例

    这就是Java对象序列化与反序列化的基本概念,以及如何与JSON格式结合使用的示例。在实际应用中,我们还需要考虑异常处理、性能优化以及安全性问题,比如使用`transient`关键字忽略某些字段,或者使用`@...

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

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

    028-精通PHP序列化与反序列化之_道_.pdf

    PHP语言中的序列化与反序列化是处理对象状态持久化与重建的重要手段。本文将深入探讨PHP序列化与反序列化的概念、方法以及在实际应用中的重要性,并详细介绍与反序列化相关的安全漏洞。 首先,序列化是一个将对象...

    C#序列化与反序列化(包括复杂xml对象)

    在C#编程中,序列化和反序列化是两个关键的概念,它们主要用于对象状态的持久化和恢复。本文将深入探讨C#中的XML序列化和反序列化技术,包括如何将XML文档解析为对象,以及如何将对象转换回XML文档进行存储。我们将...

    序列化和反序列化的封装类

    反序列化时,我们需要确保接收的数据与原始对象类型匹配,否则可能会抛出异常。 为了简化序列化和反序列化的操作,开发者通常会创建一个封装类,该类提供简单的API供其他代码调用。例如,我们可以创建一个名为`...

Global site tag (gtag.js) - Google Analytics