`

Java IO下---对象序列化与反序列化

    博客分类:
  • Java
阅读更多

 

今天我们主要来讲解一下对象序列化,首先我们需要知道什么是对象序列化,所谓的对象序列化就是将一个对象转换为二进制流,如果一个类的对象要想实现序列化,则该对象所在的类必须实现Serializable接口,在此接口中没有任何的方法,此接口只是作为一个标识,表示本类的对象具备了序列化的能力。

序列化的思想是“冻结”对象状态,传输对象状态(写到磁盘、通过网络传输等等),然后“解冻”状态,重新获得可用的Java对象,所有这些事情的发生有点像魔术,这要归功于ObjectInputStream/ObjectOutputStream类,完全保真的元数据以及程序员愿意用Serializable标识接口标记他们的类,从而“参与”这个过程。

序列化分为两大部分:序列化和反序列化。序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络上传输。反序列化就是打开字节流并重构对象。对象序列化不仅要将基本数据类型转换成字节表示,有时还要恢复数据。恢复数据要求有恢复数据的对象实例,如果某个类能够被序列化,其子类也可以被序列化。声明为statictransient类型的成员数据不能被序列化。因此static代表类的状态,transient代表对象的临时数据

对象序列化在一下场景使用比较合适:

a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;

b)当你想用套接字在网络上传送对象的时候;

c)当你想通过RMIRemote Method Invocation 远程方法调用)传输对象的时候;

 

 

 如果要想实现对象的序列化,则还要依靠ObjectOutputStream类和ObjectInputStream类,前者属于序列化操作,而或者属于反序列化操作。

 

package com.iflytek.io03;

import java.io.Serializable;

/**
 * @author xudongwang 2012-1-8
 * 
 *         Email:xdwangiflytek@gmail.com
 */
public class Person implements Serializable {
	private String name;
	private int age;

	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	public String toString() {
		return "姓名:" + this.name + ",年龄:" + this.age;
	}

	public int getAge() {
		return age;
	}

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

	public String getName() {
		return name;
	}

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

}

 

 下面通过ObjectOutputStream完成序列化操作:

 

package com.iflytek.io03;

import java.io.File;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

/**
 * @author xudongwang  2012-1-8
 *
 *  Email:xdwangiflytek@gmail.com
 */
public class ObjectOutputStreamDemo {
	public static void main(String args[]) throws Exception {
		File file = new File("d:" + File.separator + "demo.txt");
		ObjectOutputStream oos = null;
		oos = new ObjectOutputStream(new FileOutputStream(file));
		Person per = new Person("王旭东", 21);
		oos.writeObject(per);
		oos.close();
	}

}

 

 对象被实例化之后,就可以通过ObjectInputStream进行反序列化的操作

 

package com.iflytek.io03;

import java.io.File;
import java.io.FileInputStream;
import java.io.ObjectInputStream;

/**
 * @author xudongwang  2012-1-8
 *
 *  Email:xdwangiflytek@gmail.com
 */
public class ObjectInputStreamDemo {
	public static void main(String args[]) throws Exception {
		File file = new File("d:" + File.separator + "demo.txt");
		ObjectInputStream ois = null;
		ois = new ObjectInputStream(new FileInputStream(file));
		Object obj = ois.readObject();
		Person per = (Person) obj;
		System.out.println(per);
	}

}

 

 以上操作实际上是整个对象进行的序列化操作,如果现在假设类中的某个属性不希望被序列化的话,则使用transient关键字进行声明;

 

private transient String name;

 

 由上面可知可以对一个对象序列化,那么因为Object可以接受任意的引用数据类型,所以也可以同时对多个对象一起进行序列化操作,包括数组;

 

package com.iflytek.io03;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

/**
 * @author xudongwang  2012-1-8
 *
 *  Email:xdwangiflytek@gmail.com
 */
public class SerializableDemo {
	public static void main(String args[]) throws Exception {
		Person per[] = { new Person("张三", 30), new Person("李四", 40),new Person("王五", 50) };
		serializable(per);
		Person p[] = (Person[]) delSerializable();
		print(p);
	}
	public static void serializable(Object obj) throws Exception {
		File file = new File("d:" + File.separator + "demo.txt");
		ObjectOutputStream oos = null;
		oos = new ObjectOutputStream(new FileOutputStream(file));
		oos.writeObject(obj);
		oos.close();
	}
	public static Object delSerializable() throws Exception {
		Object temp = null;
		File file = new File("d:" + File.separator + "demo.txt");
		ObjectInputStream ois = null;
		ois = new ObjectInputStream(new FileInputStream(file));
		temp = ois.readObject();
		return temp;
	}
	public static void print(Person per[]) {
		for (Person p : per) {
			System.out.println(p);
		}
	}

}
 

 

1
1
分享到:
评论

相关推荐

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

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

    java对象序列化和反序列化

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

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

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

    Java IO commons-io-2.5.jar

    5. 对象序列化:`SerializationUtils` 提供了序列化和反序列化对象的实用方法,简化了对象的持久化过程。 6. 文件比较:`FileComparison` 类可以帮助比较两个文件或目录是否相同,对于版本控制或备份很有用。 7. 二...

    C#和Java的序列化反序列化

    本篇文章将深入探讨C#和Java中的序列化与反序列化机制。 首先,我们要了解什么是序列化。序列化是指将对象的状态转化为可存储或可传输的数据格式的过程。这个过程通常将内存中的对象转换成字节流,以便保存到磁盘、...

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

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

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

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

    java序列化(Serializable)的作用和反序列化.doc

    ### Java序列化(Serializable)的作用与反序列化详解 #### 一、序列化的概念 序列化是指将程序中的对象转换为一系列字节流的过程,主要用于保存对象的状态或在网络之间传输对象。序列化的主要目的是为了能够持久化...

    Java对象的序列化与反序列化Java开发Java经验技巧

    Java对象的序列化与反序列化是Java编程中一项重要的技术,它允许我们将Java对象转换为字节流,便于存储、传输或者在网络间传递。这一过程对于数据持久化、跨进程通信(如RMI,Remote Method Invocation)以及分布式...

    Java对象的序列化和反序列化实践

    在Java编程语言中,对象的序列化和反序列化是两个关键的概念,它们对于数据存储、网络传输以及持久化有着重要的作用。这篇文章将深入探讨这两个主题,并通过实践例子来阐述其工作原理。 **序列化(Serialization)*...

    关于 Java 对象序列化您不知道的 5 件事

    Java对象序列化是Java平台的一项重要特性,它允许将对象的状态转换为字节流,以便存储、传输或恢复。在本文中,我们将深入探讨关于Java对象序列化你可能不知道的五件事情,这些知识点对于理解和优化你的Java应用程序...

    java序列化和反序列化

    ### Java序列化与反序列化详解 #### 一、Java序列化概述 Java序列化(Serialization)是一项重要的功能,它可以将对象的状态转化为一系列字节,从而实现对象的持久化存储或在网络上传输。序列化机制使得Java对象...

    java对象序列化.ppt

    Java对象序列化是一种将对象转换为字节流的过程,以便可以将其存储在磁盘上,或者在网络中进行传输。这是Java平台提供的一种功能,允许程序员将任何Java对象持久化,即将其状态保存到磁盘,或者在网络中进行传输。...

    Java序列化

    - 使用 `java.io.ObjectInputStream` 类的 `readObject()` 方法从输入流读取对象,实现反序列化。 4. **序列化版本标识符** - `serialVersionUID` 是一个特殊的字段,用于验证序列化版本的一致性。如果类的序列化...

    java反序列化利用工具

    `Newtonsoft.Json.dll`是.NET框架下的Json.NET库,它提供了JSON序列化和反序列化的功能,但在这个场景下可能与Java反序列化无关,除非系统中混合使用了.NET和Java技术。`Run.exe`是一个Windows可执行文件,可能用于...

    java序列化(Serializable)的作用和反序列化

    ### Java序列化(Serializable)的作用与反序列化详解 #### 一、序列化是什么? 序列化是指将程序中的对象转换为字节流的过程,从而方便存储或传输这些对象。通常,序列化用于将对象的状态(即其实例变量的值,而非...

    java中的序列化与反序列化

    Java中的序列化与反序列化是Java编程语言中用于处理对象状态持久化和网络传输的重要技术。序列化是指将一个Java对象转换为字节流的过程,这样就可以将对象的状态保存到磁盘上或者通过网络传输。反序列化则是将字节流...

    JavaIODemo-master.zip

    4. **对象序列化与反序列化**:Java的序列化机制允许将对象的状态保存到磁盘或在网络上传输。ObjectOutputStream和ObjectInputStream负责对象的序列化和反序列化过程。例如,你可以使用它们来保存用户会话状态或在...

Global site tag (gtag.js) - Google Analytics