Java IO : 对象序列化与反序列化

简述对象序列化与反序列化

前言

Java中一切都是对象,在分布化环境中如果将Object从这一端网络或设备传递到另一个端,Java的序列化机制就是为解决此问题产生
序列化就是一种处理对象流的机制,即将对象内容流化,可以对流化后的对象读写操作,还可以将其传输与网络之间

对象序列化:
Serialization,将对象以字节描述的过程,即将对象写入流当中
对象反序列化:
deserialization ,将字节流重塑成一个对象,即从流中恢复对象


注意:对象的类必须实现Java.io.Serializable 接口才可以序列化,这个接口是个声明接口,没有实际方法或字段,实现此接口的类可以被序列化

序列化

在这里插入图片描述

反序列化

在这里插入图片描述
代码示例:

package deletion;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class day03_ser {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
		File f=new File("D://pra//ser.txt");
		//字节输出流
		FileOutputStream out=new FileOutputStream(f);
		//对象输出流
		ObjectOutputStream outs=new ObjectOutputStream(out);
		//通过对象输出流来序列化对象
		outs.writeObject(new car());//将car对象序列化之后写入ser.txt中
		out.flush();
		deser();//反序列化读出对象并输出基本信息
	}

	public static void deser() throws IOException, ClassNotFoundException {
		File f = new File("D://pra//ser.txt");
		// 字节输入流
		FileInputStream in = new FileInputStream(f);
		// 对象输入流
		ObjectInputStream ins = new ObjectInputStream(in);
		// 从ser.txt读入的字节转换成对象
		car c = (car) ins.readObject();
		System.out.println(c.name + " \n" + c.color + " \n" + c.price);
	}
}
//实现了Serializable接口才能被序列化
class car implements Serializable{
	String name;
	String color;
	double price;
	car(){
		name="宝马";
		color ="红";
	    price=59999.22;
	}
}


在这里插入图片描述

序列化的特点

  • 当不希望类中的某个字段被序列化时,应用transient表示这个字段,如: private transient int age;
  • 如果某个类能够被序列化,其子类也可以被序列化。
  • 如果该类有父类,则分两种情况来考虑,如果该父类已经实现了可序列接口。则其父类的相应字段及属性的处理和该类相同;如果该类的父类没有实现可序列化接口,则该类的父类所有的字段属性将不会序列化。
  • 对于父类的处理,如果父类没有实现串行化接口,则其必须有默认的构造函数(即没有参数的构造函数)。否则编译的时候就会报错。在反串行化的时候,默认构造函数会被调用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Amonlisa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值