2013-02-06 14 views
6

Ich habe vor kurzem mit Java angefangen und möchte ein Java-Modul einer großen App verstehen. Ich stieß auf diese Linie von Java-Code:BufferedReader und InputStreamReader in Java

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

Was macht dieser Java-Code. Gibt es ein C/C++ Äquivalent dazu?

+4

Warum ist das mit C++ und C markiert? –

+0

Wrapper und Wrapper.Lesen Sie das Javadoc von ['InputStreamReader'] (http://docs.oracle.com/javase/7/docs/api/java/io/InputStreamReader.html) und [' BufferedReader'] (http://docs.oracle .) zuerst. Deutsch:. Englisch: v3.espacenet.com/textdoc? –

+2

C++ äquivalent wäre grob 'std :: string line; std :: getline (std :: cin, line); ' – jrok

Antwort

9

System.in ist die Standardeingabe.

InputStreamReader können Sie einen Stream zuordnen, die von der angegebenen Eingabe (in diesem Fall die Standardeingabe) liest, so dass wir jetzt einen Stream haben.

BufferedReader ist eine "Abstraktion", die Ihnen hilft, mit Streams zu arbeiten. Zum Beispiel implementiert es readLine statt Zeichen für Zeichen zu lesen, bis Sie ein '\ n' finden, um die ganze Zeile zu erhalten. Es gibt nur einen String nach diesem Prozess zurück.

Also diese Zeile bedeutet: "Lesen Sie eine Zeile von Standard-Eingabe und speichern Sie es in line Variable".

1

Was der Code tut, liest einfach eine Zeile aus dem Eingabestream. Aus Mustersicht ist dies ein Dekorateur. In Bezug auf die Verwendung von BufferedReader soll die IO-Leistung verbessert werden.

+2

Die Verwendung von BufferedReader ist für die Methode' readLine() ', die in InputstreamReader nicht existiert. – davmac

4

Ihr Snippet verwendet einen BufferedReader, der an einen InputStreamReader angekettet ist, um aline von der Standardeingabekonsole zu lesen und in der String-Zeile zu speichern.

BufferedReader

Lesen aus einer Textzeicheneingabestrom, zu puffern, um Zeichen für die effiziente Lesen von Zeichen, Arrays und Leitungen vorzusehen. Die Puffergröße kann angegeben oder die Standardgröße verwendet werden. Der Standardwert ist für die meisten Zwecke groß genug. Im Allgemeinen verursacht jede Leseanforderung, die von einem Leser gemacht wird, dass eine entsprechende Leseanforderung von dem zugrunde liegenden Zeichen oder Bytestrom gemacht wird. Es empfiehlt sich daher, einen BufferedReader um jeden Reader zu wickeln, dessen read() - Operationen kostspielig sind, z. B. FileReaders und InputStreamReaders.

BufferedReader # readline()

eine Textzeile lesen. Eine Zeile wird entweder durch einen Zeilenvorschub ('\ n'), einen Wagenrücklauf ('\ r') oder einen Zeilenumbruch gefolgt von einem Zeilenvorschub beendet.

Input

Ein Input ist eine Brücke aus Byteströme zur Zeichenstrom: Es liest Bytes und dekodiert sie in Zeichen einen bestimmten Zeichensatz verwenden. Der Zeichensatz, den er verwendet, kann namentlich angegeben oder explizit angegeben werden, oder der Standardzeichensatz der Plattform kann akzeptiert werden. Jeder Aufruf einer der read() - Methoden eines InputStreamReader kann dazu führen, dass ein oder mehrere Bytes aus dem zugrunde liegenden Byte-Eingabestream gelesen werden. Um die effiziente Umwandlung von Bytes in Zeichen zu ermöglichen, können mehr Bytes von dem zugrundeliegenden Strom voraus gelesen werden, als notwendig sind, um die aktuelle Leseoperation zu erfüllen.

-System

Die System-Klasse enthält mehrere nützliche Klassenfelder und Methoden. Es kann nicht instanziiert werden.

Zu den von der System-Klasse bereitgestellten Funktionen gehören Standardeingabe-, Standardausgabe- und Fehlerausgangsströme; Zugang zu extern definierten "Eigenschaften"; ein Mittel zum Laden von Dateien und Bibliotheken; und ein Dienstprogramm zum schnellen Kopieren eines Teils eines Arrays.

System.in

der "Standard" Eingabestrom. Dieser Stream ist bereits geöffnet und bereit, Eingabedaten zu liefern. In der Regel entspricht dieser Stream einer Tastatureingabe oder einer anderen Eingabequelle, die von der Hostumgebung oder dem Benutzer angegeben wird.

7

> What does this java code do:

String line ist Ihr string object

new BufferedReader().readLine() ist die Instanz eines BufferedReader Text aus einem Zeicheneingabestrom zu lesen; und readline() ist eine Methode, die es implementiert, um bis zu einem Newline-Zeichen zu lesen.

new InputStreamReader() gibt Ihnen eine Instanz eines InputStreamReader, die die „Brücke“ zwischen dem Standard in Byte-Stream und dem Zeichenstrom, der ein BufferedReader will.

System.in ist die Standardeingabe (Byte-Stream)


> Is there a C/C++ equivalent of this
Nun ... es gibt keine Sprache C/C++ genannt ...;)
Also werde ich annehmen, dass Sie eine Antwort gesucht für jeden von ihnen.

In C gibt es keine "strings" Sie haben ein Zeichen-Array zu verwenden, aber Sie können Daten in einem Zeichen Array von stdin mit etwas lesen wie:

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

oder

fgets (input, 100 , stdin) 

In C++, dann würden Sie verwenden:

using namespace std; 

string line; 
getline(cin, line); 
1

Ein InputStreamReader ist eine Brücke von Byte-Streams zu Zeichen-Streams: Sie liest Bytes und decodiert sie in Zeichen mit einem angegebenen Zeichensatz. Der Zeichensatz, den er verwendet, kann namentlich angegeben oder explizit angegeben werden, oder der Standardzeichensatz der Plattform kann akzeptiert werden.

Jeder Aufruf einer der read() - Methoden eines InputStreamReader kann dazu führen, dass ein oder mehrere Bytes aus dem zugrunde liegenden Byte-Eingabestream gelesen werden. Um die effiziente Umwandlung von Bytes in Zeichen zu ermöglichen, können mehr Bytes von dem zugrundeliegenden Strom voraus gelesen werden, als notwendig sind, um die aktuelle Leseoperation zu erfüllen.

Um die höchste Effizienz zu erzielen, überlegen wir uns, einen InputStreamReader in einen BufferedReader zu integrieren. Zum Beispiel:

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