2014-01-22 111 views
0

我知道使用File class,我可以將數據存儲在硬盤上的變量中,然後再檢索它們。 但是有沒有什麼辦法可以存儲一個對象,該對象有一些變量 和方法,稍後使用該對象。如何存儲一個類的對象?

假設類ClassA和ClassB的兩類遊戲的:

public class classA{ 
    public int x,y,Vx,Vy ; 
    public void move(){ 
    x +=Vx ; 
    y +=Vy ; 

} ... }

public claassB{ 
    classA c = new classA(); 

    while(1){ 

    c.move() ; 
} 

} 
現在

讓我們說,我點擊保存按鈕,並關閉遊戲我通過點擊加載按鈕重新運行並加載遊戲

所以有什麼辦法可以存儲「C」,所以當我加載遊戲。存儲的對象將被檢索並且遊戲將從我離開的地方繼續。 實際上不是存儲我想存儲對象的對象的變量。 所以我可以傳遞對象到classB(點擊加載按鈕後)。

+3

查找 「序列化」 的consept。有成千上萬的方法來做到這一點。 'ObjectOutputStream'和'JSON'也是很好的關鍵詞,可以在你的搜索中結合使用。 – zapl

+0

非常不清楚的問題 – Dima

+0

請注意,您只能序列化數據而不是代碼,即'來自具有某些變量和方法的類的對象'不起作用,只是這些變量的值可能會被序列化。 – Thomas

回答

3

您可以使用序列化序列化你的對象 - Java提供了一個機制,稱爲對象序列化,其中一個對象可以表示爲一個字節序列,其中包括對象的數據,以及有關該對象的類型和種類數據存儲在對象中。 這是一個很好的例子。

public class Employee implements java.io.Serializable 
{ 
    public String name; 
    public String address; 
    public transient int SSN; 
    public int number; 
    public void mailCheck() 
    { 
     System.out.println("Mailing a check to " + name 
          + " " + address); 
    } 
} 

這裏展示瞭如何使用:

import java.io.*; 

public class SerializeDemo 
{ 
    public static void main(String [] args) 
    { 
     Employee e = new Employee(); 
     e.name = "Reyan Ali"; 
     e.address = "Phokka Kuan, Ambehta Peer"; 
     e.SSN = 11122333; 
     e.number = 101; 
     try 
     { 
     FileOutputStream fileOut = 
     new FileOutputStream("/tmp/employee.ser"); 
     ObjectOutputStream out = new ObjectOutputStream(fileOut); 
     out.writeObject(e); 
     out.close(); 
     fileOut.close(); 
     System.out.printf("Serialized data is saved in /tmp/employee.ser"); 
     }catch(IOException i) 
     { 
      i.printStackTrace(); 
     } 
    } 
} 

檢查文檔,以獲得更多的informations.Maybe您發現該序列是在你的情況

來源例子,以正確的方式去: Tutorialspoint

+1

你也可以使用['Externalizable'](http://docs.oracle.com/javase/7/docs/api /java/io/Externalizable.html)接口,如果你想自定義序列化。 –

0
public final static void writeObject(Object x,String name) throws IOException{ 


    try 
     { 

      FileOutputStream fileOut = new FileOutputStream(name+".ser"); 
      ObjectOutputStream out = new ObjectOutputStream(fileOut); 
      out.writeObject(x); 
      out.close(); 
      fileOut.close(); 
     }catch(IOException i) 
     { 
      i.printStackTrace(); 
     }} 


public final static Object readObject(String filename) throws IOException, ClassNotFoundException{ 

    ArrayList oldlist = null; 

     try 
     { 
      FileInputStream fileIn = new FileInputStream(filename); 
      ObjectInputStream in = new ObjectInputStream(fileIn); 
      oldlist = (ArrayList) in.readObject(); 
      in.close(); 
      fileIn.close(); 
      return oldlist; 
     }catch(IOException i) 
     { 

      writeObject(list, "list"); 
      update_list(current_link); 
      System.exit(0); 
      //i.printStackTrace(); 

       return 0;  
     }catch(ClassNotFoundException c) 
     { 

      c.printStackTrace(); 
      return null; 
     }} 
相關問題