美文网首页
android中序列化的使用

android中序列化的使用

作者: ModestStorm | 来源:发表于2020-06-09 19:39 被阅读0次

1.概述

序列化:将内存中的java对象转换为字节序列并存储在本地。
反序列化:将本地的字节序列转换为java对象。

2.android中序列化的方式:

  • Serializable:java中一直存在的序列化接口声明,类似于Cloneable只做声明标记使用,没有方法声明。要将序列化对象所属类实现Serializable接口,可以将对象保存到本地磁盘文件中。
public class Person implements Serializable {

    /*不要更改序列化id,
    *反序列化时需要用到比对序列化的对象与实际对象的id是否相同,不同会抛出 
    序列化失败异常。*/
    private static final long serialVersionUID = 1L;
    private String name;
    private int age;
}
  • Parcelable:android特有的传输效率高,常用于程序间或者进程间的数据传递,不可以将对象保存到本地磁盘中,若想保存到本地磁盘文件中还是要使用Serializable。
public class Student implements Parcelable {

    private String name;
    private int age;

    /*
     * 1.transient修饰的属性不会序列化
     * 2.static修饰的属性也不会序列化,静态属性是属于类的不属于对象。
     */
    private transient int level=2;
    private static final String className="1年级";

    protected Student(Parcel in) {
        name = in.readString();
        age = in.readInt();
    }

    public static final Creator<Student> CREATOR = new Creator<Student>() {
        @Override
        public Student createFromParcel(Parcel in) {
            return new Student(in);
        }

        @Override
        public Student[] newArray(int size) {
            return new Student[size];
        }
    };

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeInt(age);
    }
}


3.序列化方式对比:

序列化方式 实现方式 传输效率 可否在磁盘文件保存 使用场景
Serializable ObjectoutStream/ObjectInputStream 可以 序列化本地磁盘
Parcelable android特有 程序间/进程间比如ipc

4.注意点:

在使用的时候优先使用效率高的Parceable,Serializable在序列化使用的是对象输入流和对象输出流本身是一次IO操作,伴随着中间会产生大量的临时对象,会造成GC频繁的内存回收。
如果需要将java对象的字节序列保存在磁盘文件的需求,Parceable不能保存在磁盘中,只能使用Serializable了。

        //在intent中数据传递的使用
        Intent intent=new Intent();
        intent.putExtra("name",data);

        intent.getSerializableExtra("name");
        intent.getParcelableExtra("name");

相关文章

网友评论

      本文标题:android中序列化的使用

      本文链接:https://www.haomeiwen.com/subject/rsuetktx.html