<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                #### 2.3.2 Parcelable接口 上一節我們介紹了通過Serializable方式來實現序列化的方法,本節接著介紹另一種序列化方式:Parcelable。**Parcelable也是一個接口,只要實現這個接口,一個類的對象就可以實現序列化并可以通過Intent和Binder傳遞**。下面的示例是一個典型的用法。 public class User implements Parcelable { public int userId; public String userName; public boolean isMale; public Book book; public User(int userId, String userName, boolean isMale) { this.userId = userId; this.userName = userName; this.isMale = isMale; } public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeInt(userId); out.writeString(userName); out.writeInt(isMale ? 1 : 0); out.writeParcelable(book, 0); } public static final Parcelable.Creator<User> CREATOR = new Parcelable. Creator<User>() { public User createFromParcel(Parcel in) { return new User(in); } public User[] newArray(int size) { return new User[size]; } }; private User(Parcel in) { userId = in.readInt(); userName = in.readString(); isMale = in.readInt() == 1; book = in.readParcelable(Thread.currentThread().getContextClassLoader()); } } 這里先說一下Parcel,**Parcel內部包裝了可序列化的數據,可以在Binder中自由傳輸**。從上述代碼中可以看出,在**序列化過程中需要實現的功能有序列化、反序列化和內容描述**。 * 序列化功能由writeToParcel方法來完成,最終是通過Parcel中的一系列write方法來完成的; * 反序列化功能由CREATOR來完成,其內部標明了如何創建序列化對象和數組,并通過Parcel的一系列read方法(比如:readInt(),readString(),readParcelable()方法)來完成反序列化過程; * 內容描述功能由describeContents方法來完成,幾乎在所有情況下這個方法都應該返回0,僅當當前對象中存在文件描述符時,此方法返回1。 需要注意的是,**在User(Parcel in)方法中,由于book是另一個可序列化對象,所以它的反序列化過程需要傳遞當前線程的上下文類加載器,否則會報無法找到類的錯誤**。詳細的方法說明請參看表2-1。 :-: 表2-1 Parcelable的方法說明 ![](https://img.kancloud.cn/84/e9/84e90b2fa5c723fcd89a60506c6a8913_1438x533.png) **系統已經為我們提供了許多實現了Parcelable接口的類,它們都是可以直接序列化的,比如Intent、Bundle、Bitmap等,同時List和Map也可以序列化,前提是它們里面的每個元素都是可序列化的**。 既然Parcelable和Serializable都能實現序列化并且都可用于Intent間的數據傳遞,那么二者該如何選取呢? * **Serializable是Java中的序列化接口,其使用起來簡單但是開銷很大,序列化和反序列化過程需要大量I/O操作**。 * 而**Parcelable是Android中的序列化方式,因此更適合用在Android平臺上,它的缺點就是使用起來稍微麻煩點,但是它的效率很高,這是Android推薦的序列化方式,因此我們要首選Parcelable**。 **Parcelable主要用在內存序列化上**,通過Parcelable**將對象序列化到存儲設備中或者將對象序列化后通過網絡傳輸**也都是可以的,但是這個過程會稍顯復雜,因此**在這兩種情況下建議大家使用Serializable**。**進程間通信推薦使用Parcelable**。 總結:**雖然Parcelable是Android首選,但只適合于內存讀寫,持久化和網絡傳輸仍然建議Serializable** 以上就是Parcelable和Serializable和區別。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看