Java序列化与反序列化

Java的序列化与反序列化

概念:
序列化:将java对象转化成为字节序列的过程;
反序列化:将字节序列转化成为Java对象的过程;

应用:
Java序列化与反序列化主要用于通信过程的数据交换,由于Java对象是存储在内存中的,无法像普通文本文件,图像等可以直接通过网络传输,但是有时两台或多台计算机之间就是需要传输一些对象信息该怎么办呢?
此时Java的序列化和反序列化就能够发挥其作用了:首先需要传送数据的一方利用序列化将需要传输的对象序列化成为二进制文件以后通过网络进行传输,而接收方在接收到此二进制文件以后,可以通过反序列化方法将此二进制文件恢复成为Java的对象,从而实现了Java对象的传输。

注意:
1、需要序列化的类必须实现Serializable接口;
2、该类所有属性必须可以序列化。

例:
import java.io.Serializable;

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

序列化:
/**
	 * 序列化
	 */
	@Test
	public void test() {
		try {
			FileOutputStream fos = new FileOutputStream("D:\\IO\\Person.ser");
			ObjectOutputStream oos = new ObjectOutputStream(fos);
			
			Person p1 = new Person("A", "Male", 21);
			
			oos.writeObject(p1);
			oos.flush();
			oos.close();
			
			fos.close();
			
			
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

反序列化:
@Test
	public void test2(){
		
		try {
			FileInputStream fis = new FileInputStream("D:\\IO\\Person.ser");
			ObjectInputStream ois = new ObjectInputStream(fis);
			
			Person p2 = (Person) ois.readObject();
			ois.close();
			fis.close();
			
			System.out.println("++++++++++++++++++++++");
			System.out.println(p2.name);
			System.out.println(p2.gender);
			System.out.println(p2.age);
			
			
			
		} catch (IOException | ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

结果:



补充:
1、需要序列化的类必须实现Serializable接口
2、该类需要序列化的属性必须可以序列化(实现Serializable接口
3、静态变量不会被序列化
4、transient修饰的变量不会被序列化保存








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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值