博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java序列化与反序列化
阅读量:5141 次
发布时间:2019-06-13

本文共 2120 字,大约阅读时间需要 7 分钟。

在java中,对象通常都是在程序运行时创建,程序退出后对象也就消失了。在许多情况下,我们需要将对象保存,方便下次再用,或者是用于网络传播,这里就需要用到序列化和反序列化了。

序列化:简单来讲就是将对象转化为字节序列。

反序列化:就是将字节序列重新转化为对象。

而想要将对象序列化,需要它的类实现Serializable接口。

例如我们要将一个人的信息进行序列化:

public class Person implements Serializable {	private int id;	private String name;	private String gender;	public Person(int id, String name, String gender) {		this.id = id;		this.name = name;		this.gender = gender;	}	public int getId() {		return id;	}	public void setId(int id) {		this.id = id;	}	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public String getGender() {		return gender;	}	public void setGender(String gender) {		this.gender = gender;	}	@Override	public String toString() {		return "Person [id=" + id + ", name=" + name + ", gender=" + gender + "]";	}}

 

下面序列化的简单实例:

public static void serialize() throws FileNotFoundException, IOException {		File file = new File("person.dat");		Person person = new Person(99, "xiaoming", "male");		ObjectOutputStream oos = null;		oos = new ObjectOutputStream(new FileOutputStream(file));		oos.writeObject(person);		oos.flush();		oos.close();	}

 

对序列化文件进行反序列化:

public static void deSerialize() throws FileNotFoundException, IOException, ClassNotFoundException {		File file = new File("person.dat");		ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));		Person person = (Person) ois.readObject();		System.out.println(person);//输出:Person [id=99, name=xiaoming, gender=male]	}

 


 

很多时候,我们并不需要将对象中的所有成员全部序列化,而只是序列化其中的一部分。

在这种情况下,我们可以使用transient关键字来修饰不想要序列化的成员。

比如,在上面的例子中,我们不想要性别gender这个成员进行序列化,我们可以这样:

private transient String gender;

如此,在序列化时就会跳过gender,不对其进行序列化。

 


 

 

我们也可以通过writeObject,readObject方法将transient修饰的成员进行序列化,

private void writeObject(ObjectOutputStream oos) throws IOException{		oos.defaultWriteObject();		oos.writeObject(gender);	}	private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException{		ois.defaultReadObject();		gender=(String) ois.readObject();	}

其中oos.defaultWriteObject();ois.defaultReadObject();两条语句分别为将默认可序列化的成员进行序列化和反序列化

 

转载于:https://www.cnblogs.com/zhisuoyu/p/5257158.html

你可能感兴趣的文章