基本的に、次のようなテキスト ファイルを取得する必要があります。
フレッド・
バーニー・
ヘンリー
ファイルから順番に読み取ることができます
ヘンリー
・バーニー
・フレッド
私が読んでいる実際のファイルは30MBを超えており、ファイル全体を読み取り、配列に分割し、配列を逆にしてそこから移動するのは完全な解決策ではありません。時間がかかりすぎます。私の具体的な目標は、最初に出現する文字列 (この場合は "InitGame") を見つけて、その行の先頭の位置を返すことです。
私は以前にPythonでこのようなことをしました。私の方法は、ファイルの最後 (1024) までシークし、最後に到達するまで行を読み取り、前の開始点から別の 1024 をシークし、tell() を使用して、前の行に到達したときに停止することでした。出発点。そのため、探しているテキストが見つかるまで、これらのブロックをファイルの末尾から逆方向に読み取ります。
これまでのところ、Java でこれを行うのにかなりの時間を費やしています。ボルチモアの近くに住んでいる場合は、焼きたてのクッキーを手に入れることになるかもしれません。
ありがとう!
より詳しい情報:
私が読んでいるファイルは、私がサーバーをホストしているゲームのログファイルであるため、逆方向に検索する必要があります (これは、アーバン テラーの |err| サーバーです。チェックしてください)。ログ ファイルはゲームで発生するすべてのイベントを記録し、プログラムは各イベントを解析して処理し、それに基づいて行動します (たとえば、人々のヘッドショットを追跡し、d バッグである人々を自動的にキックします)。 )。最新の InitGame エントリまでさかのぼって検索し、すべてのプレーヤー オブジェクトをインスタンス化して、そのゲームの開始以降に処理する必要があったものをすべて処理できるようにする必要があります。ファイルには何百もの InitGame イベントがありますが、最後のイベントが必要です。逆方向に検索する必要のない、これを行うためのより良い方法があれば、私に知らせてください。
ありがとう