1

私はJavaを使用してサイズが4GBのTSVファイルを読み取っていますが、プログラムの実行中にJavaがタスクの進行状況を通知する方法があるかどうかを知りたいと思いました。ファイルストリームは、読み取ったバイト数を教えてくれるかもしれないと思っています。それを使って簡単な計算を行うことができます。

4

3 に答える 3

4

プレーン ストリームまたはリーダーは、読み取ったバイト/文字数をカウントしません。

を探していると思いますProgressMonitorInputStream

Swing 統合が必要ない場合は、別の方法として、読み取った文字/バイト数をカウントし、カウントを読み取るためのゲッターを提供する FilterReader または FilterInputStream のカスタム サブクラスを作成することもできます。次に、カスタム クラスを入力スタックの適切なポイントに配置します。

于 2012-06-25T04:03:37.583 に答える
2

ストリームから読み取るときに、読み取ったバイト数を記録します。たとえば、ストリームから直接バイト配列を読み取る場合:

    long bytesReadTotal = 0L;
    int bytesRead = stream.read(bytes);
    while (bytesRead != -1) {
        bytesReadTotal += bytesRead;
        // process these bytes ...
        bytesRead = stream.read(bytes)
    }
于 2012-06-25T03:46:58.270 に答える
0

このファイルを HTTP 経由で読み取る場合、"Content-Length" という名前のヘッダーがあり、読み取る必要がある合計バイト数が示され、読み取り中に進行状況がわかります。

TCP/UDP を介してファイルを読み取る場合、ファイル転送のためにクライアントとサーバーの両方を作成する必要があると思います。次に、最初にファイルの長さをクライアントに送信してから、ファイルを読み取る必要があります。

ローカル ファイルを読み取るだけであれば、これは問題ではありません。

于 2012-06-25T03:52:26.397 に答える