2013-03-16 24 views
8

Jaki jest pożytek z System.in.read() w języku Java?
Proszę wyjaśnić to.Jaki jest pożytek z System.in.read()?

+0

http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html #read() Odczytuje wartość bajta danych ze strumienia wejściowego. – Sanchit

+0

zobacz tutaj http://www.coderanch.com/t/278751//java/system-read-method – PSR

+0

prosty służy do uzyskania danych wejściowych od użytkownika. Google przed pytaniem tutaj. – Ameer

Odpowiedz

19

Być może ten przykład pomoże.

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

Nie zwracam poprawnych wartości: na przykład, gdy wprowadzę 10, to zwróci 49. – SaidbakR

+4

To dlatego, że wartość ASCII "1" wynosi 49. To działałoby zgodnie z oczekiwaniami, jeśli zmieniono "int inChar" na "char inChar". –

1

System.in.read() czyta się z standard input.

Standardowe wejście może być użyte do uzyskania danych wejściowych od użytkownika w środowisku konsoli, ale ponieważ interfejs użytkownika nie ma możliwości edycji, interaktywne użycie standardowego wejścia ogranicza się do kursów programowania.

Większość wykorzystania standardowego wejścia produkcyjnego jest w programach zaprojektowanych do pracy w linii poleceń Unix pipelines. W takich programach ładunek, który przetwarza program, pochodzi ze standardowego wejścia, a wynik programu zapisywany jest na standardowe wyjście. W takim przypadku standardowe wejście nigdy nie jest zapisywane bezpośrednio przez użytkownika, jest to przekierowane wyjście innego programu lub zawartość pliku.

Typowym rurociąg wygląda następująco:

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

sort czyta swoje dane ze standardowego wejścia, co jest w rzeczywistości wyjście komendy du. Posortowane dane są zapisywane na standardowe wyjście sort, które domyślnie trafia do konsoli i można je łatwo przekierować do pliku lub innej komendy.

Jako takie, standardowe wejście jest stosunkowo rzadko używane w Javie.

0

Umożliwia odczyt ze standardowego wejścia (głównie konsoli). This SO question może ci pomóc.

4

System jest końcowa grupa w java.lang pakietu

Kod próbki z kodu źródłowego 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() jest streszczenie sposób abstrakcyjny klasy 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; 

krótko mówiąc api:

Odczytuje pewną liczbę bajtów ze strumienia wejściowego i zapisuje je w tablicy buforów. Liczba faktycznie odczytanych bajtów jest zwracana jako liczba całkowita. Ta metoda blokuje dostęp do danych wejściowych, zostanie wykryty koniec pliku lub zgłoszony zostanie wyjątek.

z InputStream.html#read()

0

System.in.read() to metoda wprowadzania odczytu dla klasy System.in która jest „standardowy plik wejściowy” lub 0 w konwencjonalnym systemie operacyjnym.

0

Ten przykład powinien pomóc?Wraz z uwagami, oczywiście> :)

UWAGA: człowiek jest nadużywane CZĘSTO słowo w tym UST/POST

Ogólnie zalecamy użycie klasy Scanner ponieważ można wprowadzić duże zdania, nie jestem do końca pewien System.in.read ma takie aspekty. Jeśli to możliwe, popraw mnie.

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

To ... to jest naprawdę złe. – MavericksFoundation

16

Dwa i pół roku późno jest lepszy niż nigdy, prawda?

int System.in.read() odczytuje następny bajt danych ze strumienia wejściowego. Ale jestem pewien, że już o tym wiedzieliście, ponieważ niełatwo jest spojrzeć w górę. Więc, czego prawdopodobnie pytaniem jest:

  • Dlaczego jest uznany zwrócić int gdy dokumentacja mówi, że czyta byte?

  • i dlaczego wydaje się zwracać śmieci? (I typ '9', ale zwraca 57.)

Zwraca int ponieważ oprócz wszystkich możliwych wartości bajtu, to również musi być w stanie powrócić dodatkową wartość, aby wskazać końcówki -strumień. Musi więc zwrócić typ, który może wyrażać więcej wartości niż puszka byte.

Uwaga: Mogli się mu short, ale zdecydowaliśmy się na int zamiast możliwie jak czubek kapelusza historycznego znaczenia dla C, którego getc() zwraca również int, ale co ważniejsze, ponieważ short jest Trochę kłopotliwe w obsłudze, (język nie ma możliwości określenia literału short, więc musisz podać literał int i przesłać go do short,) plus na niektórych architekturach int ma lepszą wydajność niż short.

Wydaje się, aby powrócić śmieci ponieważ podczas wyświetlania znaku w postaci liczby całkowitej, czego szukasz na to ASCII (*) wartość tego znaku. Tak więc "9" pojawia się jako 57. Ale jeśli rzucisz go na postać, otrzymasz "9", więc wszystko jest w porządku.

myśleć o tym w ten sposób: jeśli wpisany znak „9” jest bezsensowne oczekiwać System.in.read() powrót numer 9, bo wtedy jaki numer można się spodziewać, że do powrotu jakbyś wpisał się 'a'? Oczywiście znaki muszą być odwzorowane na liczby. ASCII (*) to system odwzorowywania znaków na liczby. W tym systemie znak "9" jest oznaczony numerem 57, a nie numerem 9.

(*) Niekoniecznie ASCII; może to być inne kodowanie, na przykład UTF-16; ale w ogromnej większości kodowań, a już na pewno we wszystkich popularnych kodowaniach, pierwsze 127 wartości są takie same jak ASCII. Dotyczy to wszystkich angielskich znaków alfanumerycznych i popularnych symboli.

+0

Nie wartość ASCII; Jednostka kodowa UTF-16. "9" -> 57. "[] (http://www.fileformat.info/info/unicode/char/1d400/index.htm)" -> [55349, 56320] –

+0

@TomBlodget Nie sądzę, że zwróci kod UTF-16 . Wyświetla strumień wejściowy jako strumień bajtów, więc zwróci pojedynczy bajt. Jeśli strumień jest strumieniem (powiedzmy, małym endianem) znaków UTF-16, to nadal będzie zwracany bajt, najpierw niski bajt znaku UTF-16, potem wysoki bajt, potem niski bajt następna postać i tak dalej. Oczywiście mogę się mylić. I nie zweryfikowałem tego. Ale jesteś pewien? –

+0

Masz rację. Wartości pochodzą z kodowania konsoli. Podkreślam tylko, że kodowanie konsoli prawdopodobnie nie będzie ASCII. –

1

Wystarczy uzupełnić zaakceptowane odpowiedź, można też użyć System.out.read() tak:

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

Nie zapewnia to odpowiedzi na pytanie. Gdy masz już wystarczającą [reputację] (https://stackoverflow.com/help/whats-reputation), będziesz mógł [komentować dowolny wpis] (https://stackoverflow.com/help/privileges/comment); zamiast tego [dostarczaj odpowiedzi, które nie wymagają wyjaśnień od pytającego] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do-zamiast). - [Z recenzji] (/ review/low-quality-posts/18720909) –

+0

miałeś na myśli 'System.in.read()', prawda? –

+0

@GillesGouaillardet Naprawdę, to nie mniej ważna odpowiedź niż przyjęta odpowiedź, problem polega na tym, że pytanie nie jest tak naprawdę pytaniem. – Vitruvius

Powiązane problemy