java对象序列化处理 Serializable浅谈

本博客致力于成为学习工作的参考文档

Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节重建成一个对象的过程。

序列化的应用:

1.把的内存中的对象状态保存到一个文件中或者数据库中时候;

2.将对象进行传输

3.可以通过网络传输将对象传输

4.跨系统,甚至可以在windows操作系统创建一个对象,然后在linux系统将其重装。


按照Java的定义,数据区分为5个部分:

1.栈

2.堆

3.方法区

4.本地方法栈

5.程序计数器

其中,对象是保存在堆中的,对象的状态(实例变量)是保存在栈中。

我们有没有想过,在程序退出前,将对象已经其状态保存下来,下次启动程序的时候可以读取出来呢?


要将类进行持久化处理,就要实现Serializable接口。而这个Serializable接口,是没有任何方法或者字段,只是提供接口标记。

public interface Serializable {
}

举个简单例子:

import java.io.Serializable;

public class Animal implements Serializable{
	
	private String name;

	public String getName() {
		return name;
	}

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

public class Test {

	public static void main(String[] args) throws IOException, ClassNotFoundException {

		Animal animal=new Animal();
		animal.setName("狗狗");
		
		FileOutputStream fs=new FileOutputStream("animal.txt");
		ObjectOutputStream os=new ObjectOutputStream(fs);
		os.writeObject(animal);
		os.close();
		
		FileInputStream fis=new FileInputStream("animal.txt");
		ObjectInputStream ois=new ObjectInputStream(fis);
		Animal animal2=(Animal) ois.readObject();
		System.out.println(animal2.getName());
		ois.close();
	}
}

运行结果:在控制台打印出“狗狗”
这个时候,我们可以认为,我们已经将Animal对象a nimal的状态给持久化保存下来。

如果Animal类不实现Serializable接口,运行时就会出现NotSerializableException的错误,只有实现了这个接口,Animal的对象才可能被序列化处理。

下面是将对象进行序列化处理的关键:

os.writeObject(animal);
对象的序列化是基于字节,要序列化一个对象,首先要创建一个FileOutputStream对象,并将其封装在ObjectOutputStream对象内,这时候,只要调用writeObject()方法即可进行序列化处理。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值