2012-04-27 5 views
1

Javaで特定の数の要素(文字、具体的に)を一度に読み取るにはどうすればよいですか?それは説明するのは少し難しいですが、私の考えはこれです:Javaでは、ファイルから複数の要素を一度にどのように反復処理するのですか?

私が入ったテキストファイルがある場合:

をこれが

TEXT.TXTという名前のテキストファイルである私がしたいですファイルを繰り返し処理する特定の長さの文字列または文字配列を持つことができます。したがって、長さを3に指定した場合、char配列には[T、h、i]の最初の反復が含まれ、一度反復すると[h、i、s]、[i、s] 、 ]、 等々。

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

Javaでこれを実現する方法はありますか?私はBufferedReaderを使用しようとしましたが、私はそれを完全に利用するためにそれに精通していません。

+2

'BufferedReader.read []) 'はあなたが望むものです。 –

+1

コードを投稿してください。 BufferedReaderがあなたのために働いていない場合、私たちはそれを助けることができます。 –

+0

なぜこのようにファイルを読み込みたいのですか?あなたの例では、ファイル内の最初の3文字を読み取ってからもう1文字を読み込み、最初の文字を削除してから、繰り返しているようです。どうして? – Bernard

答えて

1

実際には、入力ストリームとリーダーの両方をバッファリングすることで、最良のI/Oパフォーマンスを得ることができます。 (バッファリングは一つだけ改善のほとんどを与え、ダブルバッファリングは少し良いですが、それは良いです。)ここでのサンプルコードは、一度にファイルのチャンクを読み込むためです:

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を構築するときに文字エンコードを指定することもできます。 (を使用して入力ストリームを処理することは回避できますが、文字セットのエンコーディングを指定することはできず、ダブルバッファリングによるわずかなパフォーマンスの向上は得られません)。

+0

ええと、私はBufferedReaderの仕組みを完全に理解していなかったようです。ありがとうございました! – aiden

関連する問題