java基础 序列化与反序列化

Java对象序列化与反序列化

有什么用?

序列化一个对象与反序列化对象可能只在java语言中能用到,如果想把对象的状态保存,别的语言是无法识别,也就是没有对其反顺序列化。因此要想跨语言,最好用别的格式来保存,比如xml,txt等。

序列化能保存对象的哪些状态?

只能保存对象的属性的值,方法是没法保存的,因为方法是属性类的,而属性的的值是属性对象的。

怎么样序列化一个对象?

1、创建一个FileOutputStream fileStream = new FileOutputStream(“filename”);

如果文件名不存在,他会自动创建的。

2、创建一个ObjectOutStream对象ObjectOutStream os = new ObjectOutStream(fileStream); 

3、把你的对象添加到ObjectOutStream对象中,如 os.wirteObject(MyObject);

4、一定要记得关闭输出流 os.close();

如果要序列化的对象引用了别的对象,别的对象也引用了对象,那么这些对象都会被序例化,也就是一种递归的序列过程。

 

什么样的类可以序列化?

实现了Serializable接口的类是可以序列化的。

如果在要序列化的类中有不能序列化的引用对象,那么会引发异常

如java.io.NotSerializableException

import java.io.*; public class Pond implements Serializable { private Duck duck = new Duck(); public static void main(Strin args) { Pond myPond = new Pond(); try { FileOutputStream fs = FileOutputStream(“pond.ser”); ObjectOutputStream os = new ObjectOutputStream(fs); os.writeObject(myPond); os.close(); } catch(Exception ex) { ex.printStackTrace(); } } } public class Duck { //代码….. }

去除不想序列化的变量?

加上translent

如translent String name; name变量不会被序列化。

 

反序列化

1、 FileInputStream fileStream = new FileInputStream(“filename”);

2、 ObjectInputStream os = new ObjectInputStream(fileStream);

3、 Object one = os.redobject();

4、 Os.close();

  java基础 序列化与反序列化_第1张图片

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(java基础 序列化与反序列化)