私は最近 Java を始めましたが、大きなアプリの Java モジュールを理解したいと思っています。次のJavaコード行に出くわしました:
String line = (new BufferedReader(new InputStreamReader(System.in))).readLine();
この Java コードは何をしますか。これに相当する C/C++ はありますか?
System.in
は標準入力です。
InputStreamReader
指定された入力 (この場合は標準入力) から読み取るストリームを関連付けることができるため、ストリームが作成されました。
BufferedReader
ストリームを操作するのに役立つ「抽象化」です。たとえば、readLine
行全体を取得するために '\n' が見つかるまで、1 文字ずつ読み取る代わりに実装します。このプロセスの後に文字列を返すだけです。
したがって、この行は「標準入力から行を読み取り、line
変数に格納する」ことを意味します。
> 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++ という言語はありません... ;)
だから、それぞれの答えが欲しかったと思います。
stdin
C では、文字配列を使用する必要がある「文字列」はありませんが、次のような方法で文字配列にデータを読み込むことができます。
char input[100];
...
scanf("%99[^\n]", input);
また
fgets (input, 100 , stdin)
C++ では、次を使用します。
using namespace std;
string line;
getline(cin, line);
スニペットは、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
「標準」入力ストリーム。このストリームはすでに開いており、入力データを提供する準備ができています。通常、このストリームは、ホスト環境またはユーザーによって指定されたキーボード入力または別の入力ソースに対応します。
コードが行うことは、入力ストリームから行を読み取るだけです。パターンの観点からは、これはデコレータです。BufferedReader の使用に関しては、IO パフォーマンスの向上を目指しています。
InputStreamReader は、バイト ストリームから文字ストリームへのブリッジです。指定された文字セットを使用して、バイトを読み取り、文字にデコードします。使用する文字セットは、名前で指定するか、明示的に指定するか、プラットフォームのデフォルトの文字セットを受け入れることができます。
InputStreamReader の read() メソッドの 1 つを呼び出すたびに、基礎となるバイト入力ストリームから 1 つまたは複数のバイトが読み取られる場合があります。バイトから文字への効率的な変換を有効にするために、現在の読み取り操作を満たすのに必要なバイトよりも多くのバイトが、基礎となるストリームから先読みされる場合があります。
最高の効率を得るために、InputStreamReader を BufferedReader 内にラップすることを検討します。例えば:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));