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 的優缺點
-
優點:
- 簡單易用:只需要實現 Serializable 介面,不需要額外的程式碼或方法
- Java 原生支援:Serializable 是 Java 自帶的介面,不需要依賴第三方庫
-
缺點:
-
效能不如 Parcelable 高效:Serializable 使用反射(reflection)機制,效率較低,尤其是在 Android 中,Parcelable 更推薦使用
-
佔用更多記憶體:序列化的物件會佔用更多的記憶體空間
-
總結
-
Serializable 是 Java 提供的一種序列化介面,用於將物件轉換為位元組流,方便儲存和傳輸
-
使用非常簡單:類只需要實現 Serializable 介面即可
-
適合簡單物件傳輸:但在 Android 中,Parcelable 是一個更高效的替代方案,特別是在大量物件傳輸時
-
通俗來說,Serializable 就像給物件“拍照”和“復原”的工具,讓你可以把物件儲存下來,傳到另一臺電腦上,或者下次開啟再恢復成原來的樣子