2017-05-26 97 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()来获取目录中的所有文件时,它们都被表示为文件,而不是卡对象。

这是因为他们文件,而不是对象。