Android序列化与反序列化

1. 什么是java序列化,如何实现java序列化?

我们有时候将一个java对象变成字节流的形式传出去或者从一个字节流中恢复成一个java对象,例如,要将java对象存储到硬盘或者传送给网络上的其他计算机,这个过程我们可以自己写代码去把一个java对象变成某个格式的字节流再传输,但是,JRE本身就提供了这种支持,我们可以调用OutputStream的writeObject()方法来做,如果要让java 帮我们做,要被传输的对象必须实现Serializable接口,这样,javac编译时就会进行特殊处理,编译的类才可以被writeObject()方法操作,这就是所谓的序列化。需要被序列化的类必须实现Serializable接口,该接口是一个mini接口,其中没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的

例如,在web开发中,如果对象被保存在了Session中,tomcat在重启时要把Session对象序列化到硬盘,这个对象就必须实现Serializable接口。如果对象要经过分布式系统进行网络传输或通过rmi等远程调用,这就需要在网络上传输对象,被传输的对象就必须实现Serializable接口

2. Serializable

Serializable是一个javase标记接口,会产生一个序列化值,该值跟bean的成员相关,所以实现Serilizable接口的时候,必须给一个uid,否则,当成员变化的时候,标记值也会变化,再次读取的时候也出现exception(要先重新write再read,但是write可能会让之前的数据丢失)

注意事项

  • 使用transient关键字声明不需要序列化的成员变量
  • 序列化数据后,再次修改类文件,读取数据会出问题,如何解决呢?
private static final long serialVersionUID = -2071565876962058344L;

3. Parcelable

因为Serializable接口在序列化的时候会产生大量的临时变量,效率较低,而Parcelable是android推出的高效序列化接口

Android序列化与反序列化_第1张图片

public final class Rect implements Parcelable {
   
    public int left;
    public int top;
    public int

你可能感兴趣的:(Android基础,android,序列化,反序列化,Parcelable,serialize)