2012-03-10 6 views
1

ランダムアクセスファイルを使用してバイナリツリーを更新しようとしています。しかし、ノードを追加するたびにツリー全体を書き換えるのではなく、変更したばかりのノードを更新したいだけです。これまでに2つの質問があります:ランダムアクセスファイルを使用してJavaのファイルの一部を更新する

RandomAccessFileを使用してファイルにオブジェクトを書き込む際に問題が発生しました。ノードオブジェクトであるため、RAFには読み取り/書き込みメソッドがありません。私はツリークラスのためにSerializableを実装しましたが、ツリーをファイルに書き出す方法はまだ分かりません。 mynodebyte[]ではないので、私はエラーを取得しています

Node<String> mynode = new Node<String>(); 
RandomAccessFile raf = new RandomAccessFile("raf.txt", "rw"); 
raf.write(mynode, 0, 100); 

私の2番目の問題は、上書きするファイルの検索方法がわかりません。私がやったのは、idのノードに余分なフィールドを追加することです。id:のハッシュマップを保持して、どこを変更するかを決めます。これが正しい方法であるかどうかわからない

+2

なぜファイルに保存しますか?実際には、ほとんどの場合、データベースを使用したいと思うでしょう。 –

答えて

1

あなたのアプローチがあなたの思う通りに機能するとは思わない。 RandomAccessFileは、任意の位置でバイトを読み書きするために使用されます。あなたは確かにあなたのオブジェクトを取って、バイト配列にシリアル化することができます。それから、RAFに書き込んだり(またはファイル出力ストリームを使ってシリアル化されたバイトを書きます)、レコードを更新するときに役立ちません。あなたがそれを変更するたびに、おそらくレコードの長さが違うでしょう。

コメントの1つで言及したように、あなたが探しているものはデータベースです.RandomAccessFileがあなたにアクセスできる単純な線形連鎖よりも高いレベルの抽象化です。

レコードを読み書きすることができるファイルベースのストレージシステム(軽量の組み込みデータベース)を探している場合は、jdbm2をチェックしてください。また、bツリー構造も組み込まれていますバイナリツリーよりもファイルベースのストアの場合)。