0

たとえば、テキストファイルの20文字を段階的に読み取るにはどうすればよいですか。たとえば、関数read_nextがある場合、最初に呼び出すと文字列の最初の20文字が返され、2回目に呼び出すと次の20文字が返されます。ファイル。ファイル全体を配列に読み込んでから分割したくないことに注意してください。

4

2 に答える 2

1

基本的に使いたいInputStream#read(byte[])

入力ストリームからいくつかのバイトを読み取り、それらをバッファ配列に格納します。実際に読み取られたバイト数は整数として返されます

public int read(InputStream is, byte[] bytes) throws IOException {
    return is.read(bytes);
}

次に、基本的にこのメソッドを呼び出します...

byte[] bytes = new byte[20];
int bytesRead = -1;
while ((bytesRead = read(is, bytes)) != -1) {
    // Process the bytes..
    // Note, while bytes.length will always == 20
    // there will only ever be bytesRead worth of 
    // values in the array
}

更新しました

いくつかの素晴らしいフィードバックの後、同じアイデアをUFT-8でエンコードされたファイルに適用することもできます。Reader

public int read(Reader reader, char[] chars) throws IOException {
    return reader.read(chars);
}

そして、そのようにメソッドを呼び出します...

Reader reader = new InputStreamReader(new FileInputStream("file"), "UTF-8");
char[] chars = new char[20];
int charsRead = -1;
while ((charsRead = read(reader, chars)) != -1) {
    // Process chars, the same caveats apply as above...
}
于 2012-11-05T04:50:30.693 に答える
0

BufferedReaderで1行読みます。それはファイル全体である可能性があります:(うまくいけばそうではありません。

指定されたバイト数を読み取ることができますが、それらは文字(utf-8)より多くなる可能性があります

于 2012-11-05T04:51:18.950 に答える