[英]Best practice to update my data structure?
我有以下問題,需要最佳實踐來解決:
我有一個帶有Foo
類型數據列表的應用程序。 我使用以下命令將該列表( ArrayList<Foo>
)保存到文件系統:
FileOutputStream fos = context.openFileOutput(FILENAME, Context.MODE_PRIVATE);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(MyList);
oos.close();
啟動應用程序時,我將其加載:
FileInputStream fis = context.openFileInput(FILENAME);
ObjectInputStream ois = new ObjectInputStream(fis);
MyList = (ArrayList<Foo>) ois.readObject();
ois.close();
現在我的問題是:我想用一些附加屬性擴展Foo
類。 問題是,用戶保存了舊列表並想將其加載到新的Foo
類中,該應用將崩潰。
解決此更新問題的最佳實踐是什么?
在您的方案中使用序列化可能不是最佳選擇。 為避免崩潰,您可以使用serialVersionUID區分同一類的不同版本。
通過Java API:
序列化運行時與每個可序列化的類關聯一個版本號,稱為serialVersionUID,在反序列化期間使用該版本號來驗證序列化對象的發送者和接收者是否已加載了該對象的與序列化兼容的類。
如果接收方已為該對象加載了一個與相應發送方類具有不同的serialVersionUID的類,則反序列化將導致InvalidClassException。
可序列化的類可以通過聲明一個名為serialVersionUID的字段來顯式聲明其自己的serialVersionUID,該字段必須是靜態的,最終的且類型為long。
您的數據模型是否如此復雜,以致無法在SQLite DB中編寫? 這將允許您有選擇地處理模型的加載,跳過可能導致加載具有舊結構的新模型的空屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.