美文网首页
序列化技术 parcelable与serializable

序列化技术 parcelable与serializable

作者: 瞎子点灯 | 来源:发表于2016-05-18 18:02 被阅读0次

    序列化概念

    对象的序列化 : 把Java对象转换为字节序列并存储至一个储存媒介的过程。
    对象的反序列化:把字节序列恢复为Java对象的过程。

    为什么要将对象序列化?

    1、永久性保存对象,保存对象的字节序列到本地文件中;
    2、用过序列化对象在网络中传递对象;
    3、通过序列化对象在进程间传递对象。

    serializable

    对于Serializable,类只需要实现Serializable接口,并提供一个序列化版本id(serialVersionUID)即可。

    private static final long serialVersionUID=0L;
    

    ** 案例1: **
    1)MySerializable.java

    public class MySerializable implements Serializable {...}
    

    2)MainActivity.java

     MySerializable mySerializable = new MySerializable ();
     Intent intent = new Intent(this,Second.class);  
     intent.putExtra("mySerializable",mySerializable );
    

    3)Second.java

     Intent intent = getIntent();
     MySerializable mySerializable = intent.getSerializableExtra("mySerializable");
    

    parcelable

    1. 实现Parcelable接口
    2. 添加实体属性
    3. 覆写writeToParcel(Parcel dest, int flags)方法,指定写入Parcel类的数据。
    4. 创建Parcelable.Creator静态对象,有两个方法createFromParcel(Parcel in)与newArray(int size),前者指定如何从Parcel中读取出数据对象,后者创建一个数组。
    5. 覆写describeContents方法,默认返回0。

    Parcelable 示例代码:

    public class MyParcelable implements Parcelable {
         private int mData;
         public int describeContents() {
             return 0;
         }
         public void writeToParcel(Parcel out, int flags) {
             out.writeInt(mData);
         }
         public static final Parcelable.Creator<MyParcelable> CREATOR
                 = new Parcelable.Creator<MyParcelable>() {
             public MyParcelable createFromParcel(Parcel in) {
                 return new MyParcelable(in);
             }
             public MyParcelable[] newArray(int size) {
                 return new MyParcelable[size];
             }
         };
             private MyParcelable(Parcel in) {
             mData = in.readInt();
         }
     }
    

    存入数据:

    Bundle bundle = new Bundle();  
    bundle.putParcelable("myParcelable", myParcelable );  
    Intent intent = new Intent(MainActivity.this, SecondActivity.class);  
    intent.putExtras(bundle); 
    

    取出数据:

    Intent intent = getIntent();  
    Bundle bun = intent.getExtras();  
    MyParcelable myParcelable = bun.getParcelable("myParcelable");  
    System.out.println(myParcelable );  
    

    serializable与parcelable的选择

    1、在使用内存的时候,Parcelable比Serializable性能高,所以推荐使用Parcelable类。
    2、Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。
    3、Parcelable不能使用在将数据存储在磁盘上的情况,因为Parcelable不能很好的保存数据的持续性在外界有变化的情况下。因此在这种情况下,建议使用Serializable。

    相关文章

      网友评论

          本文标题:序列化技术 parcelable与serializable

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