2017-05-26 45 views
-1

我創建了一個類,並定期將此類的對象保存到內部存儲器中。讓我們假設這是類:Java中的對象序列化

public class Card{ 

    String name; 
    double number; 

    public Card(String name, double number){ 
    this.name = name; 
    this.number = number; 
      } 


    public String getName(){ 
     return name; 
      } 


    public double getNumber(){ 
     return number; 
      } 

      } //End of class 

這是將卡對象的數組對象我的代碼的一部分:

public boolean addCard(String name, double number){ 

    File rFolder = new File(Environment.getExternalStorageDirectory(), "rootFolder"); 

    if (!rFolder.exists()) { 
     rFolder.mkdirs(); 
    } 

    Card newCard = new Card(name, number); 

    try{ 
     FileOutputStream fos = openFileOutput(Integer.toString(getNumber()),MODE_WORLD_READABLE); 
     //getNumber() is a method that gets the total number of items in the root directory. 
     ObjectOutputStream oos = new ObjectOutputStream(fos); 
     oos.writeObject(newWallet); 
     oos.close(); 
     fos.close(); 
     return true; 
    } 

    catch (Exception e){ 
     Toast.makeText(getApplicationContext(), "Failed, try again", Toast.LENGTH_LONG).show(); 
    } 

    return false; 

     } 

現在,我的問題是如何從這個代表一個文件目錄(這是一個卡對象無論如何)作爲一個卡對象?即使當我使用listFiles()來獲取目錄中的所有文件時,它們也被表示爲文件,而不是Card Objects。

+1

您閱讀關於序列化的教程。那些通常也覆蓋反序列化部分。他們還解釋瞭如何正確序列化對象。例如,通過在正確的流上關閉一次close。 – GhostCat

回答

-1

我已經解決了這個問題:主要問題是我忘了在我的一個類中實現Serializable。

對於那些可能有類似問題的人:序列化(在此上下文中)是指將對象轉換爲文件,反序列化是相反的。

下面是一個簡單的例子:

//Below is the object we want to serialize: 
Card card = new Card("Joker", 4); 

FileOutputStream fos = openFileOutput("Joke", Context.MODE_APPEND); 
ObjectOutputStream oos = new ObjectOutputStream(fos); 
oos.writeObject(card); 

//It's safe to close these classes. 
oos.close; 
fos.close; 

在這個階段,對象保存在內存中的笑話。現在,反序列化:

FileInputStream fis = openFileInput("Joke"); 
ObjectInputStream ois = new ObjectInputStream(fis); 
Card savedCard = (SingleWallet) ois.readObject(); 
ois.close; 
fis.close; 

這就是全部。我希望這可以幫助別人!

+0

@EJP。謝謝您的幫助! – Taslim

1

即使當我使用listFiles()來獲取目錄中的所有文件時,它們都被表示爲文件,而不是卡對象。

這是因爲他們文件,而不是對象。