4

ソケットのInputStreamから読み取っています。受信データをその場で解析しているため、文字ごとに読み取る必要があります。

BufferedReader.read()と同じことをInputStream.read()しますか?(BufferedReaderがInputStreamをベースとして構築されていると仮定します)

各文字を個別に読み取るときにInputStream.read()を使用する方が効率的ですか?それとももっと良い方法はありますか?

4

2 に答える 2

5

BufferedReader は、基礎となる Reader から複数の文字を読み取ります。InputStream がバイトを提供しています。したがって、彼らは2つの異なるデータ型に取り組んでいます。Reader を Stream にどのようにラップしていますか? おそらく、あなたは次のようになったと思います:

 BufferedReader in
   = new BufferedReader(new InputStreamReader(socket));

その場合、文字エンコーディングを慎重に指定します。

最適化の観点からは、一度に数キロバイトを読み取るため、BufferedReader を使用することをお勧めします。必要なときに各文字を取得できます (必ずしも新しい IO 読み取りを強制する必要はありません)。

于 2009-10-11T12:43:31.107 に答える
0

InputStream クラスの read() メソッドは抽象メソッドです。それは私が推測する InputStreamrReader でなければなりません。質問に戻ると、InputStreamReader と BufferesReader クラスの両方の read() メソッドは同じことを行います。文字の ascii 値を返します。唯一の違いは、BufferedReader がバッファリングと呼ばれるものを使用することです。これにより、読み取る頻度を減らすことができます。チャンクをメイン メモリにコピーすることによるディスク/STDIN の場合、InputStreamReader を使用すると、read() の呼び出しごとにディスク/STDIN からバイトが読み取られ、文字に変換されてから返される可能性がありますが、これは非常に非効率的である可能性があります。

于 2016-12-19T15:23:17.143 に答える