0

UTF 形式で保存されたファイルに対してバイナリ検索を実行する方法はありますか? RandomAccessFile を使用して、テキスト ファイルに対してバイナリ検索を実行できます。最初にファイルの長さを調べてから、fseek を使用してファイルの中間位置にジャンプします。中間位置にジャンプした後、バイトを読み取ります。ただし、最初の文字が UTF 形式ではランダムであるため、UTF 形式で保存されたファイルには適していません。また、DataInputStream を使用すると、ファイル内の特定の位置にジャンプできません。そのようなファイルでバイナリ検索を行うことは可能ですか? はいの場合、どのクラスを使用しますか。

4

1 に答える 1

1

はい、可能です。ファイルの途中にジャンプする場合は、最初に最も近いレコード セパレータに移動してから、レコード セパレータの後に始まるテキストを使用する必要があります。

使用している正確なファイル形式に応じて、ライン フィード、TAB 文字などをレコード セパレータとして使用できます。

Unicode 番号が 32 未満の文字 (NL、CR、TAB が満たす) の場合、レコード区切り記号を見つけるのは簡単です。次に、マルチバイトの UTF-8 エンコーディングを気にする必要はありません (セパレーターを見つけるため)。ワイド文字の Unicode 形式であれば、それほど難しくはありません。

DataInputStreamは、ランダム アクセスからの間違ったクラスです。(ストリーミングは、ランダム アクセスの反対のようなものです。)代わりにRandomAccessFileを見てください。

于 2012-04-16T16:54:11.530 に答える