第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java自定義序列化

Java自定義序列化

哈士奇WWW 2019-10-19 14:14:06
我有一個對象,其中包含一些要序列化的不可序列化字段。它們來自我無法更改的單獨API,因此使它們可序列化不是一種選擇。主要問題是Location類。它包含所有我需要的可以序列化的四件事。如何使用read / writeObject創(chuàng)建可以執(zhí)行以下操作的自定義序列化方法:// writeObject:List<Integer> loc = new ArrayList<Integer>();loc.add(location.x);loc.add(location.y);loc.add(location.z);loc.add(location.uid);// ... serialization code// readObject:List<Integer> loc = deserialize(); // Replace with real deserializationlocation = new Location(loc.get(0), loc.get(1), loc.get(2), loc.get(3));// ... more code我怎樣才能做到這一點?
查看完整描述

3 回答

?
三國紛爭

TA貢獻1804條經(jīng)驗 獲得超7個贊

類似于@momo的答案,但不使用List和自動裝箱的int值,這將使其更加緊湊。


private void writeObject(ObjectOutputStream oos) throws IOException {

    // default serialization 

    oos.defaultWriteObject();

    // write the object

    oos.writeInt(location.x);

    oos.writeInt(location.y);

    oos.writeInt(location.z);

    oos.writeInt(location.uid);

}


private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException {

    // default deserialization

    ois.defaultReadObject();

    location = new Location(ois.readInt(), ois.readInt(), ois.readInt(), ois.readInt());

    // ... more code


}


查看完整回答
反對 回復(fù) 2019-10-19
?
慕標琳琳

TA貢獻1830條經(jīng)驗 獲得超9個贊

如果必須是Java序列化,我唯一知道的方法就是重新定義readObject()writeObject(),并且在所有類中都引用實例,Location如Momo的答案所示。請注意,這將不允許您序列化Location[],并要求您對Collection<Location>代碼中出現(xiàn)的所有子類進行子類化。此外,它要求將類型的字段Location標記為瞬態(tài),這會將它們的定義排除在寫入序列化流之外,從而有可能挫敗不兼容類更改的檢測。

更好的方法是簡單地重寫ObjectOutputStream.writeObject。that,那個方法是final。您可以改寫ObjectOutputStream.writeObjectOverride(),但是該方法不能委托默認實現(xiàn),ObjectOutputStream.writeObject0()因為該方法是private。當然,您可以使用反射來調(diào)用私有方法,但是...

因此,我建議驗證您的約束。一定要Java序列化嗎?您真的不能更改類的定義Location嗎?

如果您有要分類的源代碼Location,則將其添加implements Serializable并將其添加到您的classpath中非常簡單。是的,每當升級庫時,都必須再次執(zhí)行此操作,但是它可能比其他方法更好...


查看完整回答
反對 回復(fù) 2019-10-19
  • 3 回答
  • 0 關(guān)注
  • 356 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號