java serialable实现,Android:Parcelable和Serialable的区别?

在Android中,我们不能仅仅将对象传递给活动。要做到这一点,对象必须实现Serializable或Parcelable接口。

系列化

Serializable是一个标准的Java接口。你可以直接实现Serializable接口和添加重写方法。这种方法的问题是使用反射,这是一个缓慢的过程。此方法创建了许多临时对象,并导致相当多的垃圾收集。然而,Serializable接口更容易实现。

请看下面的示例(可序列化):// MyObjects Serializable classimport java.io.Serializable;import java.util.ArrayList;import java.util.TreeMap;import android.os.Parcel;import android.os.Parcelable;public class MyObjects implements Serializable {

private String name;

private int age;

public ArrayList address;

public MyObjects(String name, int age, ArrayList address) {

super();

this.name = name;

this.age = age;

this.address = address;

}

public ArrayList getAddress() {

if (!(address == null))

return address;

else

return new ArrayList();

}

public String getName() {

return name;

}

public String getAge() {

return age;

}}// MyObjects instanceMyObjects mObjects = new MyObjects("name", "age", "Address array here");// Passing MyObjects instance via intentIntent mIntent = new Intent(FromActivity.this, ToActivity.class);mIntent.putExtra("UniqueKey", mObjects);startActivity(mIntent);// Getting MyObjects instanceIntent mIntent = getIntent();MyObjects workorder = (MyObjects)    mIntent.getSerializableExtra("UniqueKey");

Parcelable

Parcelable过程比Serializable..造成这种情况的原因之一是,我们明确了序列化过程,而不是使用反射推断它。这也是合理的,这段代码已经为此目的进行了大量的优化。

请看下面的示例(Parcelable):// MyObjects Parcelable classimport java.util.ArrayList;import android.os.Parcel;import android.os.Parcelable;public class MyObjects implements Parcelable {

private int age;

private String name;

private ArrayList address;

public MyObjects(String name, int age, ArrayList address) {

this.name = name;

this.age = age;

this.address = address;

}

public MyObjects(Parcel source) {

age = source.readInt();

name = source.readString();

address = source.createStringArrayList();

}

@Override

public int describeContents() {

return 0;

}

@Override

public void writeToParcel(Parcel dest, int flags) {

dest.writeInt(age);

dest.writeString(name);

dest.writeStringList(address);

}

public int getAge() {

return age;

}

public String getName() {

return name;

}

public ArrayList getAddress() {

if (!(address == null))

return address;

else

return new ArrayList();

}

public static final Creator CREATOR = new Creator() {

@Override

public MyObjects[] newArray(int size) {

return new MyObjects[size];

}

@Override

public MyObjects createFromParcel(Parcel source) {

return new MyObjects(source);

}

};}// MyObjects instanceMyObjects mObjects = new MyObjects("name", "age", "Address array here");// Passing MyOjects instanceIntent mIntent = new Intent(FromActivity.this, ToActivity.class);mIntent.putExtra("UniqueKey", mObjects);startActivity(mIntent);// Getting MyObjects instanceIntent mIntent = getIntent();MyObjects workorder = (MyObjects) mIntent.getParcelableExtra("UniqueKey");

你可以通过ArrayList可分割物体如下:// Array of MyObjectsArrayList mUsers;// Passing MyOjects instanceIntent mIntent = new Intent(FromActivity.this, ToActivity.class);mIntent.putParcelableArrayListExtra("UniqueKey", mUsers);startActivity(mIntent);// Getting MyObjects instanceIntent mIntent = getIntent();ArrayList mUsers = mIntent.getParcelableArrayList("UniqueKey");

结语Parcelable比

Serializable界面

Parcelable接口需要更多的时间来实现。

Serializable界面

Serializable接口更容易实现。

Serializable接口创建了许多临时对象,并导致相当多的垃圾收集。

Parcelable数组可以在android中通过意图传递。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当在 Android 中遇到 "Parcelable encountered IOException writing serializable object" 错误时,这通常是由于递的对象没有正确实现 `Parcelable` 接口而导致的。要解决这个问题,您可以尝试以下几种方法: 1. 实现 Parcelable 接口:确保要传递的对象正确地实现Parcelable 接口。Parcelable 接口提供了一种序列化和反序列化对象的方式,以便在 Android 组件之间进行传递。您可以按照以下步骤实现 Parcelable 接口: - 在要传递的对象类中实现 Parcelable 接口。 - 实现 `writeToParcel(Parcel dest, int flags)` 方法,将对象的属性写入 Parcel 对象。 - 实现 `describeContents()` 方法,返回 0。 - 添加一个名为 `CREATOR` 的 `Parcelable.Creator` 对象,并实现 `createFromParcel(Parcel source)` 和 `newArray(int size)` 方法。 2. 序列化对象:如果您不需要使用 Parcelable 接口,而是希望使用 Java 的序列化机制,您可以确保要传递的对象正确地实现Serializable 接口。Serializable 接口提供了一种将对象序列化为字节流的机制,以便在 Java 中进行传递。请确保要传递的对象及其所有嵌套对象都实现Serializable 接口。 3. 检查对象中的属性:当一个对象实现ParcelableSerializable 接口时,其所有嵌套属性也必须是可序列化的。请确保对象中的所有属性都实现ParcelableSerializable 接口。 4. 避免传递大型对象:尽量避免传递大型对象,特别是 Bitmap 等占用大量内存的对象。如果传递大型对象是必需的,可以考虑其他方式,如使用文件或数据库进行传递。 通过以上方法,您应该能够解决 "Parcelable encountered IOException writing serializable object" 错误。如果问题仍然存在,请检查错误日志以获取更详细的信息,并在需要时提供相关代码以便更好地帮助您解决问题。如有任何疑问,请随时向我提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值