簡體   English   中英

在Java中使用序列化的最佳方法是什么?

[英]What is the best way to use Serialization in Java?

我知道序列化是一種保存對象實例的快速方法,其中包括對象內的所有變量,不包括靜態引用和標有transient關鍵字的變量。

我對I / O不太滿意,我的應用程序大約有50個類,其中有三個不同的對象(其中包含對象)。

例如,我有Animal ClassEmployee ClassVehicle 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類具有用於對AnimalEmployeeVehicle和其他類進行序列化/反序列化的方法。

您可以通過使用單個方法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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM