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

什么是序列化,Java中序列化的实现

阅读更多
什么是序列化与反序列化,为什么要实现序列化与反序列化,Java和Android中实现序列化的方式及两种实现序列化的区别及优缺点是什么?本文主要围绕以上问题进行探讨

1、什么是序列化与反序列化?
  序列化是指将Java对象通过字节流或者文件(XML)的形式持久化到文件或者数据库的过程。反序列化则是次序列化的Java对象反向恢复成对象的过程。

2、为什么要实现序列化与反序列化?
   我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本、图片、音频、视频等, 而这些数据都会以二进制序列的形式在网络上传送。那么当两个Java进程进行通信时,能否实现进程间的对象传送呢?答案是可以的。如何做到呢?这就需要Java序列化与反序列化了。换句话说,一方面,发送方需要把这个Java对象转换为字节序列,然后在网络上传送;另一方面,接收方需要从字节序列中恢复出Java对象。
当我们明晰了为什么需要Java序列化和反序列化后,我们很自然地会想Java序列化的好处。其好处一是实现了数据的持久化,通过序列化可以把数据永久地保存到硬盘上(通常存放在文件里),二是,利用序列化实现远程通信,即在网络上传送对象的字节序列。(以上内容来自网络)

3、如何实现序列化与反序列化?
  3.1Java中实现序列化和反序列化
  Java中实现序列化与反序列化是通过实现 Serializable 接口标志一个对象可以被序列化与反序列化,在程序中序列化通过 new ObjectOutPutStream(new FileOutPutStream(new File(path))).writeObject()实现对一个对象的序列化,  new ObjectInPutStream(new FileInPutStream(new File(path))).readObject()实现对一个对象的反序列化读取。具体代码如下:


序列化对象Person:
package com.serialize.leiht;

import java.io.Serializable;

public class Person implements Serializable {
	
	private String name;
	private String telPhone;
	private int id;
	private String sex;

	public Person(String name, String telPhone, int id, String sex) {
		super();
		this.name = name;
		this.telPhone = telPhone;
		this.id = id;
		this.sex = sex;
	}
	
	@Override
	public String toString() {
		return this.name + this.telPhone + this.id + this.sex;
	}
	
	public String getName() {
		return name;
	}

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

	public String getTelPhone() {
		return telPhone;
	}

	public void setTelPhone(String telPhone) {
		this.telPhone = telPhone;
	}

	public int getId() {
		return id;
	}

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

	public String getSex() {
		return sex;
	}

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


	
}


序列化对象过程(WriteObject)
package com.serialize.leiht;

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

public class WritePerson {
	public static void main(String[] args) {
		FileOutputStream fos = null;
		ObjectOutputStream oos = null;
		
		try {
			String path = "src/person.bin";
			
			fos = new FileOutputStream(new File(path));
			oos = new ObjectOutputStream(fos);
			
			Person p = new Person("zhangsan", "13880246907", 100, "man");
			
			oos.writeObject(p);
			
			System.out.println("序列化Person成功!");
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			if(oos != null) {
				try {
					oos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if(fos != null) {
				try {
					fos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}


反序列化过程(ReadObject)
package com.serialize.leiht;

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

public class ReadPerson {
	public static void main(String[] args) {
		FileInputStream fis = null;
		ObjectInputStream ois = null;
		
		try {
			String path = "src/person.bin";
			
			fis = new FileInputStream(new File(path));
			
			ois = new ObjectInputStream(fis);
			
			Person person = (Person) ois.readObject();
			
			if(person == null) {
				System.out.println("反序列货失败!");
			}else {
				System.out.println(person);
			}
			
		}catch(Exception e) {
			e.printStackTrace();
		}finally{
			
		}
	}
}
分享到:
评论

相关推荐

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

    而在Java中,我们可以通过实现`Serializable`接口来使类支持序列化,或者使用`java.io.ObjectOutputStream`和`java.io.ObjectInputStream`进行对象的序列化和反序列化。 接下来,我们讨论反序列化。反序列化是序列...

    java序列化和反序列化的方法

    在 Java 中,序列化和反序列化是通过实现 Serializable 接口来实现的。Serializable 接口是一个标记接口,不包含任何方法,但它告诉 Java虚拟机(JVM)该类可以被序列化。 在上面的代码中,我们可以看到 ...

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

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

    java序列化实现演示

    Java序列化是Java平台中的一种标准机制,允许对象的状态被保存到磁盘或者在网络中进行传输,以便在后续的时间或地点恢复这些对象。这个过程包括两个主要操作:序列化(将对象转换为字节流)和反序列化(将字节流恢复...

    java反序列化工具

    Java反序列化是一种将已序列化的对象状态转换回对象的过程,它是Java平台中持久化数据的一种常见方式。在Java应用程序中,序列化用于保存对象的状态以便稍后恢复,或者在网络间传输对象。然而,这个过程也可能引入...

    Java实现序列化例子

    Java序列化是Java平台提供的一种将对象转换为字节流,以便存储到磁盘、数据库或网络中的机制。它是Java语言内置的一种特性,主要用于持久化数据,也可以在进程间传递对象,或者在网络上传输对象。在Java中,如果一个...

    Java序列化_Java序列化结构_

    Java序列化是Java平台中的一种持久化机制,它允许对象的状态被转换成字节流,以便存储、网络传输或在不同时间点恢复。这个过程被称为序列化,而反向操作称为反序列化。序列化在许多场景下都非常有用,比如在分布式...

    java serializable 序列化与反序列化

    **一、Java序列化** 1. **什么是序列化**:序列化是将对象的状态(属性和成员变量)转换为可以存储或传输的数据格式的过程。在Java中,通常是将对象转换为字节数组,以便写入磁盘或通过网络发送。 2. **为什么需要...

    Java序列化

    Java序列化是Java平台中的一种标准机制,允许将对象的状态转换为字节流,以便存储在磁盘上、通过网络进行传输或者在某些时候恢复原来的对象状态。这一过程包括两个主要步骤:对象的序列化(将对象转换为字节流)和反...

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

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

    Protocol Buffer序列化对比Java序列化.

    - Java序列化:主要针对Java平台,跨语言支持较差,若要在非Java环境中使用,需要额外的转换。 5. 版本兼容性: - Protocol Buffer:PB允许在不改变消息编号的情况下添加、删除和修改字段,提供了较好的向前和向...

    Java对象序列化标准最新版

    ### Java对象序列化标准知识点详解 #### 一、系统架构概览 **1.1 概览** Java 对象序列化是一种将Java对象的...以上内容涵盖了Java序列化标准的关键知识点,深入了解这些概念有助于更好地理解和应用Java序列化技术。

    java对象序列化和反序列化

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

    java序列化全解

    Java序列化是Java平台中的一种核心机制,它允许对象的状态被转换成字节流,以便存储到磁盘、数据库,或者在网络中进行传输。这对于实现持久化、远程方法调用(RMI)以及Enterprise JavaBeans(EJB)等高级功能至关...

    json序列化与反序列化处理代码(java版本)

    极好的序列化与发序列化代码。可以处理array集合,数组或者单个对象等的序列化与反序列化。

    java自动序列化

    一、什么是Java序列化 Java序列化是将对象转换为字节流的过程,目的是为了保存对象的状态以便稍后恢复或传输到其他地方。通过实现`Serializable`接口,一个Java对象就可以被序列化。这个接口是一个标记接口,没有...

    java中的序列化与反序列化

    Java序列化机制的优点在于它提供了一种标准的方式来处理对象的持久化和在网络间的传输。然而,序列化也存在安全风险,比如序列化可能导致远程代码执行攻击。因此,对于敏感信息或复杂对象结构,应谨慎使用序列化,并...

    Java 文件 序列化 读写

    - 在Java中,如果一个类想要实现序列化,只需实现`Serializable`接口即可,但该接口没有任何方法,只是一个标志接口。 3. **序列化过程**: - 使用`ObjectOutputStream`类的`writeObject()`方法将对象序列化到...

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

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

    java 序列化代码示例

    Java序列化是Java平台中的一种标准机制,它允许将对象的状态转换为字节流,以便存储、传输或恢复。在Java中,一个类如果要实现序列化,需要实现`Serializable`接口,这是一个标记接口,不包含任何方法。下面我们将...

Global site tag (gtag.js) - Google Analytics