在Parcelable中包裹读/写操作时,变量顺序是否重要?

时间:2017-05-05 09:04:10

标签: java android serialization parcelable

我有Parcelable类的以下实现:

public class DemoModel implements Parcelable {
    private String para1;
    private int para2;

    public DemoModel(){}

    protected DemoModel(Parcel in) {
        para1 = in.readString();
        para2 = in.readInt();
    }

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeString(para1);
        parcel.writeInt(para2);
    }

    //other methods
}

在写入/读取包裹时保持秩序是否重要?为什么?

2 个答案:

答案 0 :(得分:9)

是的,。写入变量的顺序取决于您,您可以根据需要进行操作,但必须以相同的顺序读取它们。如果订单不同,它会给你运行时崩溃。

为什么?机制是盲目的,所以它相信你能以正确的顺序获得它。 主要是为了获得性能优势,因为它不必搜索特定元素。 您可以在Parcelable界面中看到,它创建的数组大小包含您放入地块的多个元素。

public interface Creator<T> {
    /**
     * Create a new array of the Parcelable class.
     * 
     * @param size Size of the array.
     * @return Returns an array of the Parcelable class, with every entry
     * initialized to null.
     */
    public T[] newArray(int size);
}

答案 1 :(得分:0)

根据this source

  

要密切关注的一件非常重要的事情是您在Parcel中编写和读取值的顺序。他们需要在两种情况下都匹配。

它是由parcelable由其创建者实现的方式引起的