美文网首页
序列化技术 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