*NIXテールの一部/すべてを実装するためのutilコードがすでに存在するかどうか疑問に思っています。あるファイル/リーダーの最後のn行を別のファイル/リーダーなどにコピーしたいのですが。
4 に答える
これは良い賭けのようです:TailerLibrary。この実装はそれに基づいていますが、同じではありません。ただし、最後の100行を取得するためのルックバックを実装することもできません。:(
Heritrixのユーティリティ クラスの1 つで、この末尾の実装を確認できます。私はそれを書きませんでしたが、それを使用するコードを書きました。私が知る限り、正しく動作します。
「最後のn行」は、潜在的に可変幅のエンコーディングなどで行うのは非常に難しいです。
別のSOの質問に答えて、C#でリバースラインイテレータを作成しました。コードはすべてそこにありますが、C#では使用できないイテレーターブロックを使用しています。メソッドに目的のサイズを渡してリストを作成する方がよいでしょう。yield return
(その後、私のコードのステートメントを呼び出しに変換できます。)もちろん、代わりにlist.add()
Javaを使用する必要があり、それらのAPIもわずかに異なります。最後に、完了したらリストを逆にする必要があります。Charset
Encoding
これはすべて、ファイル全体を読みたくないことを前提としています。それを気にしない場合は、循環バッファを使用して「現時点での最後のn行」を保持し、最後まで読み取り、その後バッファを返すことができます。これは実装がはるかに簡単ですが、非常に長いファイルの場合ははるかに効率が悪くなります。ただし、ストリーム上で選択されたいくつかの文字セット(私の逆イテレータが行う)の代わりに、それを任意のリーダーに対応させるのは簡単です。