6

私は最近 Java を始めましたが、大きなアプリの Java モジュールを理解したいと思っています。次のJavaコード行に出くわしました:

String line = (new BufferedReader(new InputStreamReader(System.in))).readLine();

この Java コードは何をしますか。これに相当する C/C++ はありますか?

4

5 に答える 5

8

System.inは標準入力です。

InputStreamReader指定された入力 (この場合は標準入力) から読み取るストリームを関連付けることができるため、ストリームが作成されました。

BufferedReaderストリームを操作するのに役立つ「抽象化」です。たとえば、readLine行全体を取得するために '\n' が見つかるまで、1 文字ずつ読み取る代わりに実装します。このプロセスの後に文字列を返すだけです。

したがって、この行は「標準入力から行を読み取り、line変数に格納する」ことを意味します。

于 2013-02-06T13:40:56.333 に答える
7

> What does this java code do:

String lineあなたの文字列オブジェクトです

new BufferedReader().readLine()文字入力ストリームからテキストを読み取るBufferedReaderのインスタンスです。readline()改行文字まで読み取るために実装するメソッドです。

new InputStreamReader()標準のバイトストリームと文字ストリームの間の「ブリッジ」であるInputStreamReaderのインスタンスを提供しますBufferedReader

System.in標準入力 (バイトストリーム)


> Is there a C/C++ equivalent of this
ええと... C/C++ という言語はありません... ;)
だから、それぞれの答えが欲しかったと思います。

stdinC では、文字配列を使用する必要がある「文字列」はありませんが、次のような方法で文字配列にデータを読み込むことができます。

char input[100];
...
scanf("%99[^\n]", input);

また

fgets (input, 100 , stdin) 

C++ では、次を使用します。

using namespace std;

string line;
getline(cin, line);
于 2013-02-06T13:48:15.103 に答える
4

スニペットは、InputStreamReader にチェーンされた BufferedReader を使用して、標準入力コンソールから行を読み取り、それを String line に格納します。

BufferedReader

文字入力ストリームからテキストを読み取り、文字をバッファリングして、文字、配列、および行を効率的に読み取ることができるようにします。バッファー サイズを指定するか、既定のサイズを使用することができます。デフォルトは、ほとんどの目的に十分な大きさです。一般に、Reader から作成された各読み取り要求により、対応する読み取り要求が基になる文字またはバイト ストリームから作成されます。したがって、FileReaders や InputStreamReaders など、read() 操作にコストがかかる可能性のある Reader を BufferedReader でラップすることをお勧めします。

BufferedReader#readLine()

テキストを 1 行読みます。行は、ライン フィード ('\n')、キャリッジ リターン ('\r')、またはキャリッジ リターンの直後のラインフィードのいずれかによって終了すると見なされます。

入力ストリームリーダー

InputStreamReader は、バイト ストリームから文字ストリームへのブリッジです。指定された文字セットを使用して、バイトを読み取り、文字にデコードします。使用する文字セットは、名前で指定するか、明示的に指定するか、プラットフォームのデフォルトの文字セットを受け入れることができます。InputStreamReader の read() メソッドの 1 つを呼び出すたびに、基礎となるバイト入力ストリームから 1 つまたは複数のバイトが読み取られる場合があります。バイトから文字への効率的な変換を有効にするために、現在の読み取り操作を満たすために必要なバイト数よりも多くのバイトが、基になるストリームから先読みされる場合があります。

システム

System クラスには、いくつかの便利なクラス フィールドとメソッドが含まれています。インスタンス化できません。

System クラスによって提供される機能には、標準入力、標準出力、およびエラー出力ストリームがあります。外部で定義された「プロパティ」へのアクセス。ファイルとライブラリをロードする手段。配列の一部をすばやくコピーするためのユーティリティ メソッド。

System.in

「標準」入力ストリーム。このストリームはすでに開いており、入力データを提供する準備ができています。通常、このストリームは、ホスト環境またはユーザーによって指定されたキーボード入力または別の入力ソースに対応します。

于 2013-02-06T13:41:53.867 に答える
1

コードが行うことは、入力ストリームから行を読み取るだけです。パターンの観点からは、これはデコレータです。BufferedReader の使用に関しては、IO パフォーマンスの向上を目指しています。

于 2013-02-06T13:39:41.987 に答える
1

InputStreamReader は、バイト ストリームから文字ストリームへのブリッジです。指定された文字セットを使用して、バイトを読み取り、文字にデコードします。使用する文字セットは、名前で指定するか、明示的に指定するか、プラットフォームのデフォルトの文字セットを受け入れることができます。

InputStreamReader の read() メソッドの 1 つを呼び出すたびに、基礎となるバイト入力ストリームから 1 つまたは複数のバイトが読み取られる場合があります。バイトから文字への効率的な変換を有効にするために、現在の読み取り操作を満たすのに必要なバイトよりも多くのバイトが、基礎となるストリームから先読みされる場合があります。

最高の効率を得るために、InputStreamReader を BufferedReader 内にラップすることを検討します。例えば:

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

于 2014-07-03T15:14:38.980 に答える