Java基础回顾 : 对象序列化和反序列化

原创 2016年05月31日 13:30:59

对象的序列化主要有两种用途:
  1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
  2) 在网络上传送对象的字节序列。

如果现在要想实现对象序列化,必须让一个类去实现java.io.Serializable 接口。但是这个接口里面没有定义任何的方法。因为这是一个标识接口,表示的是一种能力,指的是类对象可以被序列化的能力。

★ . 实现对象的序列化使用ObjectOutputStream 类完成。
· 构造方法:
public ObjectOutputStream(OutputStream out) throws IOException
· 输出对象的方法:
public final void writeObject(Object obj) throws IOException

★ . 将序列化的数据再读取回来,就使用反序列化操作,利用ObjectInputStream 类完成。
· 构造方法:
public ObjectInputStream(InputStream in) throws IOException
· 读取对象的方法 :
public final Object readObject() throws IOException,ClassNotFoundException

eg : 序列化和反序列化的示例 :

package example;

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

/**
 * 对象流
 */

class Book implements Serializable{
	//默认情况下,序列化操作会将所有的属性都进行保存
	//若加上transient关键字可以使属性不被序列化
	private transient String title; 
	private double price;
	public Book() {
		
	}
	public Book(String title,double price){
		this.title = title;
		this.price = price;
	}
	@Override
	public String toString() {
		return "书名:" + this.title + ",价格:" + this.price;
	}
}

public class TestDemo {
	public static void main(String[] args) throws Exception {
		File file = new File("e:\\demo\\test.txt");
		
		//序列化操作
//		if(!file.getParentFile().exists()) {
//			file.getParentFile().mkdirs();
//		}
//		ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
//		oos.writeObject(new Book("Java核心技术开发",20.5));
//		oos.close();
		
		//反序列化操作
		if(file.exists()){
			ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
			System.out.println(ois.readObject());
			ois.close();
		}
	}

}
▲ . 对于实现Serializable接口的类来说都会有一个警告信息 . 是关于SerialVersionUID的警告 .

有关SerialVersionUID的解释请看 :  http://blog.csdn.net/sinat_18882775/article/details/46390339

版权声明:本文为博主原创文章,未经博主允许不得转载。

Java对象序列化与反序列化

Java对象转换为字节序列的过程称为序列化,用途是对象永久保存、传输。序列化运行时使用一个称为 serialVersionUID 的版本号与每个可序列化类相关联,该序列号在反序列化过程中用于验证序列化...
  • BonJean
  • BonJean
  • 2016年07月25日 22:59
  • 2356

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

首先需要导入一下包 json-lib-2.3-jdk15.jar  commons-beanutils-1.7.0.jar  commons-httpclient-3.1.jar  commons-l...
  • Mr_linjw
  • Mr_linjw
  • 2016年02月17日 17:08
  • 4527

将java对象存储到redis数据库(使用序列化和反序列化)

redis不支持直接将java对象存储到数据库中,所以需要将java对象进行序列化得到字节数组,然后将字节数组存入到redis中,需要数据的时候就从redis数据库中取出字节数组,再经过反序列化将自己...
  • xiaobao5214
  • xiaobao5214
  • 2016年08月10日 11:58
  • 9399

使用JSONObject 深度序列化和反序列化

JSONObject 和JSONArray 是json-lib.jar里面最常用的两个类,分别可以对对象和数组(集合)进行序列化和反序列化,结构清晰命了,简单易用,功能强大,效率比较高,使用至今一直较...
  • xinfei0803
  • xinfei0803
  • 2014年11月18日 23:46
  • 7172

【Java】——Json反序列化为Java对象

【项目需求】    最近做项目的时候,功能是将一个表单和一个datagrid中的集合中的数据一起传到后台去,也就是将接送。 【思路】   1、在之前做过的功能中,我们用过@request...
  • u013035538
  • u013035538
  • 2016年07月24日 21:15
  • 4126

Java对象反序列化防护

最近一直曝光的开源软件第三方反序列化漏洞: CVE-2015-7501Commons Collections Java反序列化漏洞 Springframework 反序列化RCE漏洞 都是由于Java...
  • raintungli
  • raintungli
  • 2016年07月07日 23:14
  • 1720

利用fastjson反序列化json为对象和对象数组

利用fastjson 将 .json文件 反序列化为 java.class 和 java.util.List
  • muyu709287760
  • muyu709287760
  • 2015年08月28日 20:59
  • 4349

xstream ---java序列化到xml,xml反序列化到java对象(一)

一、简单介绍 XStream是thoughtworks开发的开源框架,用于实现XML数据于Java对象、Json数据的转换。它不需要schema或其他的mapping文件就可以进行java对象和xml...
  • u014520047
  • u014520047
  • 2016年09月01日 13:32
  • 830

jackson序列化和反序列化(单个对象、列表)

1.maven配置 org.codehaus.jackson jackson-mapper-lgpl 1.7.4 2.新建一个person对象: import org.codehaus.jacks...
  • subuser
  • subuser
  • 2014年02月12日 18:37
  • 15095

Java对象序列化成字符串和反序列化

1、序列化:序列化后保存在一个字符串变量中 package com.lxh.ser.test; import java.io.ByteArrayOutputStream; import java....
  • lyliyongblue
  • lyliyongblue
  • 2015年05月24日 22:31
  • 6191
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java基础回顾 : 对象序列化和反序列化
举报原因:
原因补充:

(最多只允许输入30个字)