2

クライアントが20の質問に似たゲームをプレイできるようにするサーバーをJavaで作成しています。ゲーム自体は基本的に、オブジェクトに関する質問であるノードとオブジェクトの ID の推測である葉を持つバイナリ ツリーです。ゲームが間違った推測をした場合、プレーヤーから正しい答えを得て、それをツリーに追加できる必要があります。このデータは、ランダム アクセス ファイルに保存されます。

問題は、データが後でツリーとして再アクセスできるように、ファイル内でツリーをどのように表現するかということです。

ファイルへの書き込み/読み取り時に、ツリーなどのデータ構造を整理するための情報がどこにあるか知っている場合は、リンクしてください。どうもありがとう。


迅速な回答ありがとうございます。これは学校のプロジェクトなので、ランダム アクセス ファイルや telnet を使用するなど、奇妙な要件がいくつかあります。

4

4 に答える 4

2

このデータは、ランダム アクセスファイルに保存されます。

それはあなたの問題を解決するのが難しい方法です (「ランダム アクセス」という意味です)。

あなたが本当に解決しようとしている問題は、「複雑な」データ構造を永続化する方法です。実際、これを行う方法はいくつかあります。ここにそれらのいくつかがあります...

  • Java 永続性を使用します。これは簡単に実装できます。データ構造がシリアライズ可能であることを確認してから、数行のコードでシリアライズし、さらに数行でデシリアライズします。欠点は次のとおりです。

    • シリアル化されたオブジェクトは、コードの変更に直面すると脆弱になる可能性があります。
    • シリアル化はインクリメンタルではありません。毎回グラフ全体を書き込み/読み取ります。
    • 複数の個別のシリアル化されたグラフがある場合は、それらに名前を付けて管理するためのスキームが必要です。
  • XML を使用します。これは、Java の永続性よりも実装に手間がかかりますが、壊れにくいという利点があります。何か問題が発生した場合は、XSLT またはテキスト エディターで修正できる可能性があります。(多くのグルー コーディングを排除する XML "バインディング" ライブラリがあります。)

  • SQL データベースを使用します。これにより、Java 永続性のすべての欠点に対処できますが、より多くのコーディングが必要になり、永続データにアクセスするために別の計算モデルを使用します (クエリとグラフ ナビゲーション)。

  • データベースとオブジェクト リレーショナル マッピング テクノロジを使用します。たとえば、JPA または JDO の実装。(Hibernate が一般的な選択肢です)。これらは、多かれ少なかれ透過的な方法でデータのデータベース ビューとメモリ内ビューの間を橋渡しし、SQL データベースと XML の場合に記述する必要がある多くのグルー コードを回避します。

于 2011-03-02T03:32:06.180 に答える
1

シリーズ化を目指していると思います。これを試して:

http://java.sun.com/developer/technicalArticles/Programming/serialization/

于 2011-03-02T02:48:47.300 に答える
1

前述のように、シリアライゼーションはあなたが探しているものです。オブジェクトをファイルに書き込み、後で最小限の労力で読み返すことができます。ファイルは、オブジェクト タイプとして自動的に読み込まれます。これにより、XML を使用して自分でオブジェクトを格納しようとするよりもはるかに簡単になります。

于 2011-03-02T02:51:17.933 に答える
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);
于 2011-03-03T16:00:16.853 に答える