Android開發 - Serializable 介面對物件進行“打包”傳遞和接收後“解包”解析

阿俊学JAVA發表於2024-08-29

Serializable 是什麼

  • Serializable 是一種介面,用於將物件轉換成位元組流。通俗地說,Serializable 是一種讓物件能夠“打包”和“解包”的方式,使得它們可以在儲存和傳輸時保留其狀態和資料

Serializable 的好處

  • 在程式中,我們經常需要在不同地方傳遞資料,比如在兩個 Activity 之間傳遞一個自定義物件,或者將物件儲存在檔案中,甚至透過網路傳送給另一臺計算機。為了實現這些,必須將物件轉換為一種可以傳輸或儲存的格式——這就是序列化的作用。

  • Serializable 是一種簡單的序列化方式,可以將物件轉換為位元組流,便於儲存和傳輸

Serializable 的工作原理

  • 當一個實現了 Serializable 介面,它的物件就可以被序列化。這意味著你可以將這個物件的當前狀態轉換為一串位元組(類似於“拍照”儲存下來)。稍後可以將這些位元組轉換回原來的物件(“還原”狀態)

  • Serializable 介面非常簡單,只需要實現這個介面即可。它沒有任何需要實現的方法,這使得使用起來非常方便

程式碼示例

  • 假設有一個 User 類,並希望在兩個 Activity 之間傳遞這個物件

    • 定義一個實現 Serializable 介面的類

      import java.io.Serializable;
      
      public class User implements Serializable {
          private String name;
          private int age;
      
          public User(String name, int age) {
              this.name = name;
              this.age = age;
          }
      
          // getter 和 setter 方法
          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;
          }
      }
      
      • 在上面的示例中, User 類實現了 Serializable 介面。這樣,User 物件就可以被序列化和反序列化
    • 使用 Serializable 進行物件傳遞與接收

      • 傳遞物件:假設你在一個 Activity 中想要將 User 物件傳遞到另一個 Activity

        Intent intent = new Intent(CurrentActivity.this, NextActivity.class);
        User user = new User("Alice", 30);
        intent.putExtra("user_data", user);  // 使用 putExtra 將物件傳遞
        startActivity(intent);
        
      • 接收物件:在接收的 Activity 中,你可以透過以下方式獲取傳遞的 User 物件

        Intent intent = getIntent();
        User user = (User) intent.getSerializableExtra("user_data");  // 使用 getSerializableExtra 獲取物件
        

Serializable 的優缺點

  • 優點:

    1. 簡單易用:只需要實現 Serializable 介面,不需要額外的程式碼方法
    2. Java 原生支援SerializableJava 自帶的介面不需要依賴第三方庫
  • 缺點:

    1. 效能不如 Parcelable 高效Serializable 使用反射(reflection)機制效率較低,尤其是在 Android 中,Parcelable 更推薦使用

    2. 佔用更多記憶體序列化物件佔用更多的記憶體空間

總結

  • Serializable 是 Java 提供的一種序列化介面,用於將物件轉換為位元組流,方便儲存和傳輸

  • 使用非常簡單只需要實現 Serializable 介面即可

  • 適合簡單物件傳輸:但在 Android 中,Parcelable 是一個更高效替代方案,特別是在大量物件傳輸

  • 通俗來說,Serializable 就像給物件“拍照”和“復原”的工具,讓你可以把物件儲存下來,傳到另一臺電腦上,或者下次開啟再恢復成原來的樣子

相關文章