Android-序列化,Parcelable,Serializable
2015-01-21 10:11
405 查看
序列化可以将一个对象的状态写入到byte流中,并且可以从其他地方将这个byte流重新构造成原对象。这样让我们可以通过网络传递对象,可以将对象固化,写入数据库。
在Android中Intent可以传递序列化对象。
在Android中有两种序列化方式
Android推荐使用Parcelable:
在使用内存时,Parcelable的性能更高。使用Serializable时,会产生大量的临时变量,频繁的引起系统GC。但是,如果需要将对象存储在磁盘上的时候,需要使用Serializable,因为Parcelable不能很好的保持数据的持续性。
在使用Parcelable时需要注意:
写入的顺序和读取的顺序要一致,boolean类型要做处理,这行代码中的static final一个不能少CREATOR一定要大写。
下面是一个Parcelable的例子:
在Android中Intent可以传递序列化对象。
bundle.putSerializable("objectA", objA); bundle.putParcelable("objectB", objB);
在Android中有两种序列化方式
public class ObjectB implements Parcelable
public class ObjectA implements Serializable
Android推荐使用Parcelable:
在使用内存时,Parcelable的性能更高。使用Serializable时,会产生大量的临时变量,频繁的引起系统GC。但是,如果需要将对象存储在磁盘上的时候,需要使用Serializable,因为Parcelable不能很好的保持数据的持续性。
在使用Parcelable时需要注意:
写入的顺序和读取的顺序要一致,boolean类型要做处理,这行代码中的static final一个不能少CREATOR一定要大写。
public static final Parcelable.Creator<T> CREATOR
下面是一个Parcelable的例子:
package com.sunrui.testb; import android.os.Parcel; import android.os.Parcelable; public class ObjectB implements Parcelable { private String name; private int age; private boolean flag; public ObjectB() { } // 读取的顺序要和写入的顺序保持一致 public ObjectB(Parcel source) { name = source.readString(); age = source.readInt(); int i = source.readInt(); if (i == 1) { flag = true; } else if (i == 0) { flag = false; } } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public boolean isFlag() { return flag; } public void setFlag(boolean flag) { this.flag = flag; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeInt(age); // boolean类型需要特殊处理 if (flag) { dest.writeInt(1); } else { dest.writeInt(0); } } public static final Parcelable.Creator<ObjectB> CREATOR = new Creator<ObjectB>() { @Override public ObjectB createFromParcel(Parcel source) { return new ObjectB(source); } @Override public ObjectB[] newArray(int size) { return new ObjectB[size]; } }; @Override public String toString() { return "ObjectB [name=" + name + ", age=" + age + ", flag=" + flag + "]"; } }
相关文章推荐
- Android中Intent传递序列化对象的两种方法(Serializable,Parcelable)
- Android开发:使用序列化接口Parcelable、Serializable实现Activity间传递复杂数据类型参数
- Android序列化:Parcelable/Serializable
- android序列化之Serializable,Parcelable
- Android中两种序列化方式的比较Serializable和Parcelable
- Java 序列化对象Serializable 与 Android 序列化对象Parcelable
- Android对象序列化(二)-----Intent传递对象的两种方法(Serializable,Parcelable)
- Android中序列化的实现?使用Serializable还是Parcelable
- Android序列化之Serializable和Parcelable
- [Android] Android使用序列化接口Parcelable、Serializable
- Android开发:使用序列化接口Parcelable、Serializable实现Activity间传递复杂数据类型参数
- Android 实现序列化:Parcelable和Serializable接口的用法
- Android使用序列化接口Parcelable、Serializable
- android:--Serializable和Parcelable两种序列化
- Android中Serializable和Parcelable序列化对象详解
- Android -- 序列化Parcelable与Serializable区别及用法
- Android中使用Serializable和Parcelable实现序列化详解(含实例)
- Android 序列化 Parcelable和Serializable 浅谈
- Android序列化Serializable和Parcelable区别
- [Android] Android使用序列化接口Parcelable、Serializable