【问题标题】:Does variable order matter while parcel read/write operation in Parcelable?Parcelable中的包裹读/写操作时变量顺序是否重要?
【发布时间】:2017-10-03 16:32:25
【问题描述】:

我有以下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
}

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

【问题讨论】:

  • 语法,删除了通过标签指定的“android”

标签: java android serialization parcelable


【解决方案1】:

是的。写入变量的顺序取决于您,您可以随心所欲地进行操作,但您必须以完全相同的顺序读取它们。如果顺序不同,它会给你运行时崩溃。

为什么? 机制是盲目的,因此它相信您会按正确的顺序进行操作。 主要是为了性能优势,因为它不必搜索特定元素。 您可以在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);
}

【讨论】:

    【解决方案2】:

    根据this source

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

    这是由其创建者实现 Parcelable 的方式引起的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-31
      • 2013-10-21
      • 2011-01-16
      • 1970-01-01
      • 2015-05-10
      • 1970-01-01
      • 2019-06-19
      相关资源
      最近更新 更多