ソケットのInputStreamから読み取っています。受信データをその場で解析しているため、文字ごとに読み取る必要があります。
BufferedReader.read()
と同じことをInputStream.read()
しますか?(BufferedReaderがInputStreamをベースとして構築されていると仮定します)
各文字を個別に読み取るときにInputStream.read()を使用する方が効率的ですか?それとももっと良い方法はありますか?
ソケットのInputStreamから読み取っています。受信データをその場で解析しているため、文字ごとに読み取る必要があります。
BufferedReader.read()
と同じことをInputStream.read()
しますか?(BufferedReaderがInputStreamをベースとして構築されていると仮定します)
各文字を個別に読み取るときにInputStream.read()を使用する方が効率的ですか?それとももっと良い方法はありますか?
BufferedReader は、基礎となる Reader から複数の文字を読み取ります。InputStream がバイトを提供しています。したがって、彼らは2つの異なるデータ型に取り組んでいます。Reader を Stream にどのようにラップしていますか? おそらく、あなたは次のようになったと思います:
BufferedReader in
= new BufferedReader(new InputStreamReader(socket));
その場合、文字エンコーディングを慎重に指定します。
最適化の観点からは、一度に数キロバイトを読み取るため、BufferedReader を使用することをお勧めします。必要なときに各文字を取得できます (必ずしも新しい IO 読み取りを強制する必要はありません)。
InputStream クラスの read() メソッドは抽象メソッドです。それは私が推測する InputStreamrReader でなければなりません。質問に戻ると、InputStreamReader と BufferesReader クラスの両方の read() メソッドは同じことを行います。文字の ascii 値を返します。唯一の違いは、BufferedReader がバッファリングと呼ばれるものを使用することです。これにより、読み取る頻度を減らすことができます。チャンクをメイン メモリにコピーすることによるディスク/STDIN の場合、InputStreamReader を使用すると、read() の呼び出しごとにディスク/STDIN からバイトが読み取られ、文字に変換されてから返される可能性がありますが、これは非常に非効率的である可能性があります。