2011-03-02 117 views
1

我正在用java編寫一個服務器,它允許客戶玩類似20個問題的遊戲。遊戲本身基本上是一個二叉樹,其節點是關於對象的問題,葉子是對對象身份的猜測。當遊戲猜錯時,它需要能夠從玩家那裏得到正確答案並將其添加到樹中。這些數據將被保存到一個隨機訪問文件中。用java將數據寫入文件

現在的問題是:如何在文件中表示樹,以便數據可以在稍後以樹形式重新訪問。

如果你知道在哪裏可以找到有關保持數據結構的信息,例如在將文件寫入/讀取到文件時組織起來,那麼請鏈接它。非常感謝。


感謝大家的快速回答。這是一個學校項目,所以它有一些奇怪的要求,比如使用隨機訪問文件和telnet。

回答

1

如前所述,serialization是你在找什麼。它允許你將一個對象寫入一個文件,稍後用最小的努力讀回來。該文件將自動作爲對象類型讀回。這比使用XML自己存儲對象容易得多。

+0

鏈接已損壞。 – MSX 2016-03-02 12:15:47

+0

@MSX謝謝。更新。 – FreeAsInBeer 2016-03-02 13:23:46

2

該數據然後保存到一個隨機存取文件。

這是解決您的問題的難題(我的意思是「隨機存取」位)。

你真的想解決的問題是如何堅持一個「複雜」的數據結構。事實上,有很多方法可以做到這一點。這裏有一些...

  • 使用Java持久性。這很容易實現;確保你的數據結構是可序列化的,然後它只需要幾行代碼就可以序列化,再多幾行就可以反序列化。缺點是:

    • 序列化對象在代碼更改時可能很脆弱。
    • 序列化不是增量式的。你每次都寫/讀整個圖。
    • 如果您有多個獨立的序列化圖,則需要一些方案來命名和管理它們。
  • 使用XML。與Java持久性相比,這是更多的工作來實現,但它具有不易脆弱的優點。如果出現問題,您可以使用XSLT或文本編輯器修復它。 (有XML「綁定」庫,消除了大量的膠水編碼。)

  • 使用SQL數據庫。這解決了Java持久性的所有缺點,但涉及更多的編碼...並使用不同的計算模型來訪問持久數據(查詢與圖形導航)。

  • 使用數據庫和對象關係映射技術;例如JPA或JDO實現。 (Hibernate是一個流行的選擇)。這些橋樑在數據庫和內存數據視圖之間以不同程度的透明方式進行橋接,避免了大量需要在SQL數據庫和XML案例中編寫的膠合代碼。

0

Java序列化有一些陷阱(比如當你更新你的類時)。我會以文本格式序列化。 Json是我的第一選擇,但xml和yaml也可以。

這樣你就會有一個不依賴於你的類的二進制版本的文件。

有幾個Java庫:http://www.json.org

一些例子:

http://code.google.com/p/json-simple/wiki/DecodingExamples

http://code.google.com/p/json-simple/wiki/EncodingExamples

,並保存和讀取文件,你可以使用Commons Io

import org.apache.commons.io.FileUtis; 
import java.io.File; 
... 
File dataFile = new File("yourfile.json"); 
String data = FileUtils.readFileToString(dataFile); 

FileUtils.writeStringToFile(dataFile, content);