一、Serializable类(JAVA本身具有的)
简介:Serializable是一个接口。
作用:是JAVA提供的序列化接口,实现序列化和反序列化的操作。
二、跨进程使用
1.事前准备

public class Book implements Serializable { //注:此段可写也可不写 —— 稍后讲解 ① private static final long serialVersionUID = 13165131351L; private String mBookName; private int mBookId; /** *准备:创建Book类,并继承Seriaizable接口 * */ public Book(int bookId, String bookName) { mBookId = bookId; mBookName = bookName; } @Override public String toString() { return mBookId+""+mBookName; } }
2.序列化与反序列化
//序列化过程 Book book = new Book(123,"Android 开发艺术探索"); FileOuputStream fos = new FileOutputStream("test.txt"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(book); oss.close(); //反序列化过程 FileInputStream fis = new FileInputStream("test.txt"); ObjectInputStream ois = new ObjectInputStream(fis); Book newBook = (Book)ois.readObject(); ois.close();
注:反序列化之后对象book与newBook数据相同,但两者不是同一个对象。
3.原理
当序列化的时候,系统会把当前类的serialVersionUID写入序列化的文件中,当反序列化的时候系统回去检测文件中的serivalVersionUID是否与当前类的serivalVersionUID相同,如果不相同就会反序列化失败。
回答①:当我们继承Serializable的时候,系统会自动提供一个serialVersionUID值,但是当该类中有改变(如:成员变量 减少或者增加,我们将类拿去修改)就会改变系统提供的serialVersionUID值。
但是,如果自己设置了serialVerionUID的值,当成员变量、方法 减少或者增加的时候,因为反序列化的是之前没有改变类的序列化,所以系统会尽可能恢复多的数据。如果改变类名和成员变量的类型,就还是会反序列化失败(结构都变了)。
注:静态成员、用transient标记的成员变量不进行序列化
三、Intent之间传递Serializable类(各个Activity传递对象的方法)
//MainActivity.java Book book = new Book(123, "android开发艺术探索"); Intent intent = new Intent(MainActivity.this, SecondActivity.class); intent.putExtra("book",book); startActivity(intent); //SecondActivity.java Intent intent = getIntent(); Book book = intent.getSerializableExtra("book");
只需要让对象继承Serializable接口就可以了,之后就用Intent传递。