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

本文详细介绍了Java中对象序列化的基本概念与应用方法,包括如何实现对象的序列化与反序列化过程,以及序列化过程中需要注意的问题,如static变量与transient关键字的使用。

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

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

/**
 * 对象序列化:对象-->文件
 * 将对象转换为字节流保存起来,并在以后还原这个对象。
 * 
 * 将一个对象保存到永久存储设备上称为持久化。
 * 
 * 一个对象要先实现序列化必须实现Serializable或Externalizable接口
 * 
 * Serializable该接口中没有实现任何方法,是一个标识性接口(Marker Interface)。
 * 
 * 序列化就是把一个对象的状态写入一个字节流的过程。
 * 利用序列化可以实现将程序状态存到一个固定的存储域例如文件。
 * 
 * 对象反序列化:文件-->对象
 * 
 * 在序列化时,static变量是无法序列化的。
 * 如果A包含了对B的引用,那么在序列化A的时候也会将B一并的序列化。
 * 如果此时A可以序列化,B无法序列化,那么当序列化A的时候就会发生
 * 异常,这时可以将对B的引用设为transient,该关键字表示该变量
 * 不会被序列化
 */				
public class SerializableTest {
	
	public static void main(String[] args) throws Exception {
		
//		Person p = new Person(22, "zhangsan", 34.2);
//
//		FileOutputStream fos = new FileOutputStream("person.txt");
//		ObjectOutputStream oos = new ObjectOutputStream(fos);
//		
//		oos.writeObject(p);
//		
//		oos.close();

		
		FileInputStream fis = new FileInputStream("person.txt");
		ObjectInputStream ois = new ObjectInputStream(fis);
		
		Person p = (Person)ois.readObject();
		
		System.out.println(p.getName());
		
		
	}
}

class Person implements Serializable {
	private static final long serialVersionUID = 6488776308805978891L;

	private transient int age;	//不会被序列化
	private String name;
	private double height;
	
	public Person() {
	}

	public Person(int age, String name, double height) {
		this.age = age;
		this.name = name;
		this.height = height;
	}

	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}

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

	public double getHeight() {
		return height;
	}
	public void setHeight(double height) {
		this.height = height;
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值