[英]What is the best way to use Serialization in Java?
我知道序列化是一種保存對象實例的快速方法,其中包括對象內的所有變量,不包括靜態引用和標有transient關鍵字的變量。
我對I / O不太滿意,我的應用程序大約有50個類,其中有三個不同的對象(其中包含對象)。
例如,我有Animal Class , Employee Class , Vehicle Class 。 所有這些都在運行時包含實例對象,這些實例對象包含自己的子類,方法等。
我的問題是,使用序列化保存所有這些信息的最簡單方法是什么? 我已經與我的教授討論了這個問題,他提出了一個類似的類“ Data.class ”,它在所有內容中都有“手”,然后對其進行序列化。 最終將保存它引用的.ser文件中的每個對象。
我考慮過制作“ Data.class ”,然后制作我的所有50個類,擴展Data 。 然后讓我的保存方法做類似的事情
public void saveData(){
Data myData = new Data()
try
{
FileOutputStream fileOut =
new FileOutputStream("Data.ser");
ObjectOutputStream out =
new ObjectOutputStream(fileOut);
out.writeObject(myData);
out.close();
fileOut.close();
}catch(IOException i)
{
i.printStackTrace();
}
}
但是,我似乎無法使它正常工作。 我相信這是因為我正在創建Data的空白實例,該實例僅包含所有子類的默認值。 我確實打算保存時(在其對應對象中的所有值都填滿之后)正在調用該函數,但是我做錯了事,無法弄清楚是什么。
任何幫助將不勝感激。 當然,我不必手動序列化三種不同類型對象的每個實例嗎? 它已經超過300了,我不想這樣做。
另外,我確實為Data提供了serialVersionID並為Data實現了可序列化的接口。
確保您所有的類都實現了Serializable
接口,並且此Data
類具有用於對Animal
, Employee
, Vehicle
和其他類進行序列化/反序列化的方法。
您可以通過使用單個方法saveData(Serializable serializable, String fileName)
輕松完成此操作。 這將是滿足您需求的框架(基於您的實際代碼):
public class Data {
public void saveData(Serializable serializable, String fileName) {
try {
FileOutputStream fileOut = new FileOutputStream(fileName);
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(myData);
out.close();
fileOut.close();
} catch(IOException i) {
i.printStackTrace();
}
}
}
將不需要序列化的任何變量標記為瞬態或靜態。 如果您需要更多信息或好奇,請看這里 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.