4

各数値がバイトを表す次のサンプル ファイルがあるとします (123 にはバイト 1、2、および 3 があります)。

123456789

FileInputStream を作成するとします。これにより、バイナリがバイトごとに読み込まれます。したがって、.read() は 1 を返し、次に 2 などを返します。ここで、バッファーを作成するとします。読み込む最初のチャンク (バッファを正しく理解していれば) は 1 ~ 5 です。これにより、バイトごとに読み取るだけでなく、文字の場合は行全体などを読み取ることができます。改行し、BufferedReader に最初の行を出力するように指示すると、1-2 が出力され、次に FileInputStream から .read() を使用すると、3 ではなく 6 が返されます。)

区切り文字でデータを解析できるようにするために、BufferedReader が改行などを見つけることができるようにバッファーを作成する方法のように、スキャナーは暗黙的にバッファーを作成しますか? 別の FileInputStream をスキャナーに渡すと、.read() を使用すると、スキャナーが検出した最初の区切り文字に続く最初のバイトが出力されず、スキャナーが取得した「チャンク」の最後に出力されますか?

4

2 に答える 2

4

はい

java.util.Scannerコードから:

// Internal buffer used to hold input
private CharBuffer buf;

// Size of internal character buffer
private static final int BUFFER_SIZE = 1024; // change to 1024;
于 2009-08-27T14:08:32.213 に答える
1

明らかではありませんが、Scanner の API ドキュメントを注意深く見ると、それがインターフェイスに基づいていることがわかりますReadable。また、そのインターフェイスの唯一のメソッドはバッファーに基づいています。そうです、スキャナは暗黙的にバッファを作成します。

于 2009-08-27T14:15:33.623 に答える