1

Javaで一度に特定の数の要素(具体的には文字)を読み取るにはどうすればよいですか? 説明するのは少し難しいですが、私の考えは次のとおりです。

次の内容を含むテキスト ファイルがあるとします。

これは、text.txt という名前のテキスト ファイルです。

ファイルを反復処理する特定の長さの文字列または文字配列を使用できるようにしたいと考えています。したがって、長さを 3 に指定すると、最初の反復で char 配列に [T,h,i] が含まれ、1 回反復すると [h,i,s] になり、次に [i,s] になります。 、 ]、 等々。

ファイルから一度に特定の文字数を読み取る BufferedReader.read(char[], off, len) メソッドを使用してみましたが、私がやろうとしていることにはパフォーマンスが重要です。

Javaでこれを達成する方法はありますか? BufferedReader を使用してみましたが、十分に活用するにはあまり慣れていません。

4

1 に答える 1

1

実際には、入力ストリームとリーダーの両方をバッファリングすることで、最高の I/O パフォーマンスが得られます。(1 つだけをバッファリングすることで、ほとんどの改善が得られます。ダブル バッファリングは、ほんの少しだけ優れていますが、より優れています。) ファイルを一度にチャンク単位で読み取るサンプル コードを次に示します。

final int CHUNK_SIZE = 3;
final int BUFFER_SIZE = 8192; // explicit buffer size is better
File file = ...
InputStream is = new BufferedInputStream(new FileInputStream(file), BUFFER_SIZE);
Reader rdr = new BufferedReader(new InputStreamReader(is), BUFFER_SIZE);
char buff = new char[CHUNK_SIZE];
int len;
while ((len = rdr.read(buff)) != -1) {
   // buff[0] through buff[len-1] are valid
}
rdr.close();

もちろん、これにはあらゆる種類のエラーチェック、例外処理などが欠けていますが、ストリームとリーダーのバッファリングの基本的な考え方を示しています。を構築するときに、文字エンコーディングを指定することもできますInputStreamReader。(最初に a を使用して入力ストリームの処理をバイパスすることFileReaderはできますが、文字セットのエンコーディングを指定できず、ダブル バッファリングによるわずかなパフォーマンスの向上が失われます。)

于 2012-04-27T02:19:44.617 に答える