2013-03-16 19 views
8

Was ist die Verwendung von System.in.read() in Java?
Bitte erläutern Sie dies.Was ist die Verwendung von System.in.read()?

+0

http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html #read() Es liest ein Byte Daten aus dem Eingabestrom. – Sanchit

+0

siehe hier http://www.codeanch.com/t/278751//java/system-read-method – PSR

+0

einfach es wird verwendet, um die Eingabe vom Benutzer zu erhalten. Google, bevor Sie hier fragen. – Ameer

Antwort

19

Kann dieses Beispiel Ihnen helfen.

import java.io.IOException; 

public class MainClass { 

    public static void main(String[] args) { 
     int inChar; 
     System.out.println("Enter a Character:"); 
     try { 
      inChar = System.in.read(); 
      System.out.print("You entered "); 
      System.out.println(inChar); 
     } 
     catch (IOException e){ 
      System.out.println("Error reading from user"); 
     } 
    } 
} 
+1

Ich gebe keine korrekten Werte zurück: Wenn ich beispielsweise 10 gebe, wird 49 zurückgegeben. – SaidbakR

+4

Das liegt daran, dass der ASCII-Wert von '1' 49 ist. Dies würde wie erwartet funktionieren, wenn 'int inChar' in' char inChar' geändert wurde. –

1

System.in.read() liest aus der standard input.

Die Standardeingabe kann verwendet werden, um Eingaben von Benutzern in einer Konsolenumgebung zu erhalten. Da diese Benutzeroberfläche jedoch keine Bearbeitungsfunktionen bietet, ist die interaktive Verwendung der Standardeingabe auf Kurse beschränkt, die Programmierung programmieren.

Die meisten Produktion Verwendung von Standard-Eingabe ist in Programmen entwickelt, um in Unix-Befehlszeile pipelines arbeiten. In solchen Programmen stammt die Nutzlast, die das Programm verarbeitet, von der Standardeingabe, und das Ergebnis des Programms wird in die Standardausgabe geschrieben. In diesem Fall wird die Standardeingabe niemals direkt vom Benutzer geschrieben, es ist die umgeleitete Ausgabe eines anderen Programms oder der Inhalt einer Datei.

Ein typischer Pipeline wie folgt aussieht:

# list files and directories ordered by increasing size 
du -s * | sort -n 

sort liest seine Daten aus der Standardeingabe, die die Ausgabe des Befehls du in der Tat ist. Die sortierten Daten werden in die Standardausgabe von sort geschrieben, die standardmäßig in der Konsole angezeigt wird und problemlos in eine Datei oder einen anderen Befehl umgeleitet werden kann.

Daher wird die Standardeingabe in Java vergleichsweise selten verwendet.

0

Es ermöglicht Ihnen, von der Standardeingabe (hauptsächlich die Konsole) zu lesen. This SO question kann Ihnen helfen.

4

System ist eine letzte Klasse in java.lang Paket

Codebeispiel aus dem Quellcode der api

public final class System { 

    /** 
    * The "standard" input stream. This stream is already 
    * open and ready to supply input data. Typically this stream 
    * corresponds to keyboard input or another input source specified by 
    * the host environment or user. 
    */ 
    public final static InputStream in = nullInputStream(); 

} 

read() eine abstrakte Methode der abstrakten Klasse ist InputStream

/** 
    * Reads the next byte of data from the input stream. The value byte is 
    * returned as an <code>int</code> in the range <code>0</code> to 
    * <code>255</code>. If no byte is available because the end of the stream 
    * has been reached, the value <code>-1</code> is returned. This method 
    * blocks until input data is available, the end of the stream is detected, 
    * or an exception is thrown. 
    * 
    * <p> A subclass must provide an implementation of this method. 
    * 
    * @return  the next byte of data, or <code>-1</code> if the end of the 
    *    stream is reached. 
    * @exception IOException if an I/O error occurs. 
    */ 
    public abstract int read() throws IOException; 

Kurz aus die api:

Liest eine Anzahl von Bytes aus dem Eingangsstrom und speichert sie in das Puffer-Array b. Die Anzahl der tatsächlich gelesenen Bytes wird als als Ganzzahl zurückgegeben. Diese Methode blockiert, bis Eingabedaten verfügbar sind, das Ende der Datei erkannt wurde oder eine Ausnahme ausgelöst wird.

von InputStream.html#read()

0

System.in.read() ist eine Lese-Eingabemethode für System.in Klasse, die "Standard Eingabedatei" oder 0 in herkömmlichem Betriebssystem ist.

0

Dieses Beispiel sollte helfen?Zusammen mit den Kommentaren natürlich> :)

ACHTUNG: Der Mensch ist eine übertriebene VIEL WORT IN DIESEM ABSCHNITT/POST

Insgesamt empfehle ich die Scanner-Klasse, da können Sie Eingabe große Sätze, ich bin nicht ganz sicher System.in.read hat solche Aspekte. Wenn möglich, korrigiere mich bitte.

public class InputApp { 

// Don't worry, passing in args in the main method as one of the arguments isn't required MAN 

    public static void main(String[] argumentalManWithAManDisorder){ 
     char inputManAger; 

     System.out.println("Input Some Crap Man: "); 
     try{ 
      // If you forget to cast char you will FAIL YOUR TASK MAN 
      inputManAger = (char) System.in.read(); 
      System.out.print("You entererd " + inputManAger + " MAN"); 
     } 
     catch(Exception e){ 
      System.out.println("ELEMENTARY SCHOOL MAN"); 
     } 
    } 
} 
+0

Das ... das ist wirklich schlimm. – MavericksFoundation

16

Zweieinhalb Jahre zu spät ist besser als nie, oder?

int System.in.read() liest das nächste Datenbyte aus dem Eingabestream. Aber ich bin mir sicher, dass Sie das bereits wussten, weil es trivial ist, nachzuschlagen. Also, was Sie wahrscheinlich fragen ist:

  • Warum wird erklärt, ein int zurückzukehren, wenn die Dokumentation sagt, dass es ein byte liest?

  • und warum scheint es, Müll zurückgeben? (I-Typ '9', aber es gibt 57.)

Es gibt ein int denn neben all die möglichen Werte eines Bytes, es muss auch in der Lage sein, einen zusätzlichen Wert zurückgeben, um anzuzeigen, End-of -Strom. Also, es muss einen Typ zurückgeben, der mehr Werte ausdrücken kann als ein byte kann.

Hinweis: Sie hätten es einen short gemacht, aber sie entschied sich für int statt, möglicherweise als Spitze des Hutes von historischer Bedeutung zu C, deren getc() Funktion gibt auch eine int, aber noch wichtiger, weil short ist ein Bit umständlich zu arbeiten, (die Sprache bietet keine Möglichkeit zur Angabe eines short Literal, so müssen Sie ein int Literal angeben und es auf short, und auf bestimmten Architekturen int hat eine bessere Leistung als short.

Es scheint Müll zurück, weil, wenn Sie ein Zeichen als eine ganze Zahl zu sehen, auf das, was Sie suchen, die ASCII (*) Wert dieses Zeichens ist. Also, eine '9' erscheint als 57. Aber wenn du sie auf einen Charakter wirfst, erhältst du '9', also ist alles gut.

Betrachten Sie es auf diese Weise: wenn Sie die Zeichen eingegeben ‚9‘ ist es unsinnig System.in.read() zurückzukehren, um die Nummer 9, zu erwarten, weil dann, welche Zahl würden Sie es zurück erwarten, wenn Sie einen 'a' getippt hatte? Offensichtlich müssen Zeichen Zahlen zugeordnet werden. ASCII (*) ist ein System zum Zuordnen von Zeichen zu Zahlen. Und in diesem System entspricht das Zeichen '9' der Nummer 57, nicht der Nummer 9.

(*) Nicht unbedingt ASCII; es kann eine andere Kodierung sein, wie UTF-16; aber in der überwiegenden Mehrheit der Kodierungen und sicherlich in allen gängigen Kodierungen stimmen die ersten 127 Werte mit denen von ASCII überein. Und das schließt alle englischen alphanumerischen Zeichen und populäre Symbole ein.

+0

Nicht ASCII-Wert; UTF-16-Codeeinheit. "9" -> 57. "[] (http://www.fileformat.info/info/unicode/char/1d400/index.htm)" -> [55349, 56320] –

+0

@TomBlodget Ich glaube nicht, dass es einen UTF-16-Code zurückgeben wird . Er betrachtet den Eingabestream als einen Stream von Bytes, sodass er ein einzelnes Byte zurückgibt. Wenn der Stream zufällig ein Stream von UTF-16-Zeichen (zB Little Endian) ist, gibt er immer noch Bytes zurück, zuerst das Low-Byte eines UTF-16-Zeichens, dann das High-Byte und dann das Low-Byte des nächstes Zeichen und so weiter. Natürlich kann ich mich irren. Und ich habe das nicht verifiziert. Aber bist du sicher? –

+0

Sie haben Recht. Die Werte stammen aus der Codierung der Konsole. Ich betone nur, dass die Kodierung der Konsole wahrscheinlich nicht ASCII ist. –

1

einfach die akzeptierte Antwort zu ergänzen, können Sie auch System.out.read() wie diese verwenden:

class Example { 
    public static void main(String args[]) 
     throws java.io.IOException { // This works! No need to use try{// ...}catch(IOException ex){// ...}   

     System.out.println("Type a letter: "); 
     char letter = (char) System.in.read(); 
     System.out.println("You typed the letter " + letter); 
    } 
} 
+0

Dies liefert keine Antwort auf die Frage. Sobald Sie genug [Reputation] (https://stackoverflow.com/help/whats-reputation) haben, können Sie [jeden Beitrag kommentieren] (https://stackoverflow.com/help/privileges/comment); Stattdessen [geben Sie Antworten, die keine Klärung durch den Fragesteller erfordern] (https://meta.stackexchange.com/questions/214173/why-doe-i-need-50-reputation-to-comment-what-can- i-do-stattdessen). - [Aus Bewertung] (/ review/low-quality-posts/18720909) –

+0

Sie gemeint 'System.in.read()', richtig? –

+0

@GillesGouaillardet Wirklich, das ist nicht weniger eine Antwort als die angenommene Antwort ist, das Problem ist, dass die Frage nicht wirklich eine Frage ist. – Vitruvius

Verwandte Themen