# Unterschiede zweier System.in Varianten



## pavelle (17. Jun 2009)

Hallo zusammen,

kann mir jemand den Unterschied zwischen folgenden, system.in Varianten nennen?


```
import java.util.Scanner;

public class schmierzettel3 {


    public static void main(String[] args) {

    Scanner eingabe = new Scanner(System.in);

    String name;
    short alter;


        System.out.println("Wie heißen Sie?");
        name = eingabe.next();
        System.out.println("Geben Sie ihr Alter ein");
        alter = eingabe.nextShort();

  }
}
```



```
import java.io.*;

public class eingabe {

 
    public static void main(String[] args) throws IOException {

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

        System.out.println();


        System.out.println("Geben Sie den Radius an (in cm): ");
        String eingabe_radius = bReader.readLine();
        System.out.println("Geben Sie die Hubhöhe an (in cm): ");
        String eingabe_hubhoehe = bReader.readLine();
```


Beide Eingaben liefern das gleiche Resultat, nur wo liegt jetzt der Unterschied?
was genau macht der BufferedReader? Speichert bzw puffert er den Eingabewert?; für welchen Zweck?
Welches der beiden Eingabe Varianten, ist wann besser geeignet?


Vielen Dank,
Daniel


----------



## Gastredner (17. Jun 2009)

Der Scanner liest, wenn ich mich gerade richtig erinnere, immer nur ein Token ein, während der BufferedReader die gesamte Zeile einliest.
Würdest du als Name also "Max Mustermann" angeben, würde dir der Scanner mit next() nur "Max" liefern, während der BufferedReader dir "Max Mustermann" liefern würde.
Der Scanner hat dafür den Vorteil, dass er Eingaben nicht nur als String, sondern halt auch direkt als short, int oder als anderen primitiven Datentyp zurückgeben kann, was einem das Parsen sparen kann.


----------



## SlaterB (17. Jun 2009)

> Speichert bzw puffert er den Eingabewert?; für welchen Zweck?

zur Performance-Steigerung, jeder Zugriff auf eine evtl. weitentferne Quelle dauert einer gewisse Zeit,
lieber ganz viel auf einmal lesen und dann aus dem internen Arbeitsspeicher die einzeln abgefragten Daten bestimmen

bei System.in ist das allerdings recht nebensächlich, wenn dagegen 5 MB aus einer Datei eingelesen werden,
kann man ohne Buffer evtl. unnötig langsamen Code produzieren
(Scanner hat übrigens intern auch einen Buffer)

der Hauptgrund für BufferedReader dürfte hier schlicht die nette Methode readLine() sein, die ein InputStreamReader nicht hat

--------

Scanner und BufferedReader unterscheiden sich durch ihre Methoden,
BufferedReader liest im wesentlichen ganze Zeilen und sonst nix,

Scanner ist moderner und liest einzelne Strings (durch Leerzeichen getrennt) oder auch Zahlen, die dann automatisch geparst werden,
Scanner ist aber auch komplizierter,
wenn man in obigen Programm nach der ersten Frage "Detlef 599" eintippt und Enter drückt,
werden gleich beide Fragen auf einmal beantwortet, da in der ersten Zeile bereits zwei passende Token vorhanden sind


----------



## pavelle (24. Jun 2009)

hi,
sorry für meine späte Antwort, hatte die letzten Tage Probleme mit dem Internet.
Wollte mich bei euch für Erklärungen bedanken!

liebe Grüße


----------

