对象流涉及的序列化与反序列化

本文介绍Java中对象序列化与反序列化的概念及应用。通过实例演示如何使用对象流将自定义的Person对象写入文件并从文件中读取。探讨序列化过程中关键字transient的作用以及其实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对象流

对象流是一对高级流,可以对java中的任何对象进行读写

将对象读写到文件中

先新建一个Person类

public class Person implements Serializable{
	private static final long serialVersionUID = 1L;//这个叫序列化版本号,影响着反序列化是不是能够成功
	private String name;
	private int age;
	private String gender;
	private transient String[] otherInfo;
	/*
	 *  当一个属性使用transient修饰后,那么进行序列化时这个值会被忽略,
	 *  忽略不必要的属性可以达到对象序列化瘦身操作,减少不必要的资源开销
	 */
	public Person(String name, int age, String gender, String[] otherInfo) {
		super();
		this.name = name;
		this.age = age;
		this.gender = gender;
		this.otherInfo = otherInfo;
	}
	public String toString() {
		return "Person [name=" + name + ", age=" + age + ", gender=" + gender + ", otherInfo="
				+ Arrays.toString(otherInfo) + "]";
	}
}

现在,new一个Person对象,给它的属性赋值

		String name = "老师";
		String gender = "女";
		int age = 18;
		String[] otherInfo = {"是一名教师"+"已婚"};
		Person p = new Person(name,age,gender,otherInfo);

因为对象流是高级流,所以它必须叠加在低级流上

	FileOutputStream fos = new FileOutputStream("person.obj");
	ObjectOutputstream oos = new ObjectOutputStream(fos);
	oos.writeObject(p);
	oos.close;

如此,便能把new出来的一个Person对象保存到“person.txt”文件中。
在这里插入图片描述
下面解释在此程序执行中包涵的两个过程:
①序列化:当对象经过OOS写出时,将该对象按照结构转换为一组字节,这个过程称为:对象序列化
②数据持久化:当序列化的这组字节经过fos写入到文件中时,此字节可以在磁盘上得到永久保存(后续删除之类的操作不算),这个过程称为数据持久化。
在这里插入图片描述
把刚刚保存在“person.obj”文件中的内容读到控制台上就相对容易理解了。

//从person.obj文件中反序列化java对象
		FileInputStream fis = new FileInputStream("person.obj");
		ObjectInputStream ois = new ObjectInputStream(fis);
		
		Person p = (Person)ois.readObject();
		System.out.println(p);
		ois.close();
		System.out.println("写出完毕");
		oos.close();

值得注意的是,
①一个类若希望被对象流读写,那么这个类必须要实现接口:serializable
②当一个属性使用transient修饰后,那么进行序列化时这个值会被忽略,忽略不必要的属性可以达到对象序列化瘦身操作,减少不必要的资源开销。(比如玩游戏的时候周围的小怪,都不会存档的,再次打开游戏的时候周围的小怪等会重新生成)③对象流没有按字符集读、写这个操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值