2

こんにちは皆さん、私たちが使用する入力データのストリームを読みながら

BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));

ストリームを読むのがとても良いのならBufferedReader、なぜ私たちはただ使うことができないのですか

BufferedReader stdin=new BufferedReader(System.in);

なぜ必要なのですInputStreamReaderか??

4

5 に答える 5

2

BufferedReaderは、Readerクラスのラッパークラスのようです。System.inを使用してBufferedReaderを構築することは、単に有効な構文ではありません。BufferedReaderクラスの理由は、ドキュメントに記載されています。

一般に、リーダーで作成された各読み取り要求により、対応する読み取り要求が基になる文字またはバイトストリームで作成されます。したがって、FileReadersやInputStreamReadersなど、read()操作にコストがかかる可能性のあるReaderの周りにBufferedReaderをラップすることをお勧めします。例えば、

BufferedReader in = new BufferedReader(new FileReader( "foo.in"));

指定されたファイルからの入力をバッファリングします。バッファリングを行わないと、read()またはreadLine()を呼び出すたびに、バイトがファイルから読み取られ、文字に変換されてから返される可能性があり、これは非常に非効率的です。

于 2012-10-15T05:52:41.157 に答える
1

単純に、コンストラクターがないBufferedReader(InputStream)ためです。2 つのコンストラクターのみが使用可能です。

于 2012-10-15T05:49:00.810 に答える
0

BufferedInputStream(InputStream in)を使用できます 。これがあなたが探しているものだと思います...

于 2012-10-15T05:50:44.480 に答える
0

Input Stream Reader は、PipeLining を介して Buffered Reader に接続されます。

JVM は、バイトごとまたは文字ごとに格納するのではなく、入力を一度に格納するために、ある程度のバッファ スペースを割り当てます。そのため、ユーザーが InputStreamReader を介して入力を完全に入力した後、入力は JVM によって割り当てられたバッファーの場所に格納されます。このリーダーを使用すると、後で処理するための読み取りが高速になります。

于 2012-10-15T05:56:14.863 に答える
0

System.inストリームはリーダーであるためBufferedReader、リーダー内にストリームを配置することはできないため、読者が行っているようにストリームを変換する必要があります。

new BufferedReader(new InputStreamReader(System.in));

リーダーとライターは、「テキスト」とも呼ばれるエンコーディング (UTF-8、ISO8859-2 など) で文字を操作します。ストリームは、必ずしも任意のオブジェクトを構成するバイトではなく、バイトを操作します。(ほとんどはバイト配列を操作するだけです。) これらのデータは「バイナリ データ」とも呼ばれます。

于 2012-10-15T05:57:17.580 に答える