Frage

Wie weit ich weiß, sind die beiden häufigsten Methoden der Lesezeichenbasierten Daten aus einer Datei in Java verwendet Scanner oder BufferedReader. Ich weiß auch, dass die BufferedReader Dateien lesen effizient durch einen Puffer mit physikalischen Plattenoperationen zu vermeiden. Meine Fragen sind:

  • Does Scanner führt sowie BufferedReader?
  • Warum würden Sie Scanner über BufferedReader oder umgekehrt wählen?
War es hilfreich?

Lösung

Scanner ist für das Parsen von Token aus dem Inhalt des Stroms verwendet, während BufferedReader nur den Stream liest und tut kein spezielles Parsing.

In der Tat können Sie eine BufferedReader zu einem scanner als Quelle von Zeichen Parsen passieren.

Andere Tipps

In derzeit neuesten JDK6 Release / build (b27), die Scanner hat einen kleineren Puffer ( 1024 Zeichen ) im Gegensatz zu dem BufferedReader ( 8192 Zeichen), aber es ist als ausreichend.

In Bezug auf die Wahl, verwenden Sie die Scanner, wenn Sie wollen Parse die Datei, verwenden Sie die BufferedReader, wenn Sie auf wollen lesen die Datei Zeile für Zeile. Siehe auch den Einführungstext ihrer aforelinked API-Dokumentationen.

  • Parsing = die gegebene Eingabe als Token (Teile) zu interpretieren. Es ist in der Lage Sie bestimmte Teile direkt als int zurück zu geben, string, dezimal, usw. Siehe auch alle jene nextXxx() Methoden in Scanner Klasse.
  • Lesen = stumm Streaming. Es hält Sie zurück geben alle Zeichen, die Sie wiederum müssen manuell überprüfen, ob Sie nützlich übereinstimmen oder compose etwas möchte. Aber wenn Sie nicht brauchen, die ohnehin zu tun, dann ist das Lesen ausreichend.

Sehen Sie diesen Link , folgt zitiert von dort aus:

  

Ein BufferedReader ist eine einfache Klasse gemeint, um effizient von der Lese   Untergebener Strom. Im Allgemeinen hat jede Leseanforderung eines Reader wie ein   Filereader bewirkt eine entsprechende Leseanforderung gemacht werden   zugrunde liegende Stream. Jeder Aufruf von read () oder readline () konnte   Ursache Bytes aus der Datei, umgewandelt in das Zeichen gelesen werden, und   dann zurück, was sehr ineffizient sein kann. Die Effizienz wird verbessert   nennenswert, wenn ein Leser in einem BufferedReader verzogen wird.

     

BufferedReader synchronisiert ist, lesen so Operationen auf einem BufferedReader   kann sicher von mehreren Threads ausgeführt werden.

     

Ein Scanner auf der anderen Seite hat viel mehr Käse hinein gebaut; es   alles tun kann, dass ein BufferedReader tun kann, und auf dem gleichen Niveau von   Effizienz als auch. zusätzlich kann jedoch ein Scanner analysiert die   zugrunde liegende Strom regelmäßige Verwendung für primitive Typen und Strings   Ausdrücke. Es kann auch den zugrunde liegenden Stream mit der tokenize   Begrenzer Ihrer Wahl. Es kann auch vorwärts Abtasten der tun   zugrunde liegenden Strom ohne Berücksichtigung der Begrenzer!

     

Ein Scanner ist jedoch nicht Thread-sicher, hat es nach außen sein   synchronisiert.

     

Die Wahl einen BufferedReader oder einen Scanner verwenden, hängt von dem Code   Sie schreiben, wenn Sie eine einfache Log-Leser schreiben Buffered   Leser angemessen ist. Allerdings, wenn Sie einen XML-Parser Scanner schreiben   ist die natürliche Wahl.

     

Auch während der Eingabe zu lesen, wenn Mangel Benutzereingabezeile akzeptieren   Linie und sagen Sie einfach fügen Sie ihn in eine Datei, ein BufferedReader ist gut genug.   Auf der anderen Seite, wenn Sie wollen eine Benutzereingabe als Befehl akzeptieren, mit   mehr Optionen, und dann die Absicht, verschiedene Operationen auszuführen   basierend auf dem Befehl und Optionen angegeben wird, wird ein Scanner passen   besser.

  1. BufferedReader hat deutlich größeren Pufferspeicher als Scanner. Verwenden BufferedReader, wenn Sie lange Ketten aus einem Strom, und die Verwendung Scanner erhalten möchten, wenn Sie bestimmte Art von Token aus einem Stream analysieren möchten.

  2. Scanner kann tokenize mit benutzerdefinierten Trennzeichen verwenden und den Strom in primitive Datentypen zu analysieren, während BufferedReader nur und speichern String lesen kann.

  3. BufferedReader ist synchron, während Scanner nicht ist. Verwenden BufferedReader, wenn Sie mit mehreren Threads arbeiten.

  4. Scanner versteckt IOException beim BufferedReader es sofort wirft.

Ich schlage vor, BufferedReader zu verwenden, um Text zu lesen. Scanner versteckt IOException während BufferedReader es sofort wirft.

Der Unterschied zwischen BufferedReader und Scanner sind folgende:

  1. BufferedReader ist Synchronized , aber Scanner ist nicht synchronisiert .
  2. BufferedReader ist Threadsicherheit , aber Scanner ist nicht Thread sicher .
  3. BufferedReader hat größere Pufferspeicher aber Scanner hat kleinere Pufferspeicher .
  4. BufferedReader ist schneller , aber Scanner ist langsamer in der Ausführung .
  5. -Code eine Zeile von der Konsole zu lesen:

    BufferedReader :

     InputStreamReader isr=new InputStreamReader(System.in);
     BufferedReader br= new BufferedReader(isr);
     String st= br.readLine();
    

    Scanner :

    Scanner sc= new Scanner(System.in);
    String st= sc.nextLine();
    

Im Folgenden werden die Unterschiede zwischen BufferedReader und Scanner

  1. BufferedReader Daten nur lesen, sondern auch Scanner Parse-Daten.
  2. Sie können nur lesen String BufferedReader verwenden, aber Sie können int lesen, oder lange schwimmen Scanner verwenden.
  3. BufferedReader ist älter aus Scanner, es besteht aus JDK 1.1, während Scanner wurde hinzugefügt am JDK 5-Release.
  4. Die Puffergröße von BufferedReader ist groß (8 KB) im Vergleich zu 1 KB von Scanner.
  5. BufferedReader ist besser geeignet für das Lesen Datei mit langen String während Scanner ist für das Lesen kleiner Benutzereingaben mehr geeignet von Eingabeaufforderung.
  6. BufferedReader synchronisiert aber Scanner ist nicht, was Sie bedeutet kann nicht Scanner unter mehreren Threads gemeinsam nutzen.
  7. ist BufferedReader schneller als Scanner, weil es nicht Zeit damit verbracht hat auf Parsen
  8. ist BufferedReader ein bisschen schneller als im Vergleich zum Scanner
  9. BufferedReader ist aus java.io Paket und Scanner ist aus java.util Paket auf Basis der Punkte können wir unsere Wahl verwenden.

Danke

Die wichtigsten Unterschiede:

  1. Scanner

  • Ein einfacher Text-Scanner, der primitive Typen und Strings mit regulären Ausdrücken analysieren kann.
  • A Scanner bricht seine Eingabe in Token ein Trennzeichen Muster verwendet, die standardmäßig Leerzeichen entspricht. Die resultierenden Token können dann in Werte verschiedenen Typen umgewandelt werden, um die verschiedene nächsten Verfahren.

Beispiel

 String input = "1 fish 2 fish red fish blue fish";
 Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");
 System.out.println(s.nextInt());
 System.out.println(s.nextInt());
 System.out.println(s.next());
 System.out.println(s.next());
 s.close(); 

druckt die folgende Ausgabe:

 1
 2
 red
 blue 

Der gleiche Ausgang kann mit diesem Code erzeugt werden, die einen regulären Ausdruck verwendet alle vier Token zu analysieren auf einmal:

 String input = "1 fish 2 fish red fish blue fish";

 Scanner s = new Scanner(input);
 s.findInLine("(\\d+) fish (\\d+) fish (\\w+) fish (\\w+)");
 MatchResult result = s.match();
 for (int i=1; i<=result.groupCount(); i++)
     System.out.println(result.group(i));
 s.close(); `


  1. BufferedReader:

    • Liest Text von einem Zeicheneingabestrom, zu puffern, um Zeichen für die effiziente Lesen von Zeichen, Arrays zu liefern, und Linien.

    • Die Puffergröße festgelegt werden kann, oder die Standardgröße verwendet werden kann. Der Standardwert ist groß genug für die meisten Zwecke.

In der Regel wird jede Leseanforderung aus einem Reader bewirkt eine entsprechende Leseanforderung des zugrundeliegenden Zeichen oder Byte-Stromes gemacht werden. Es ist daher ratsam, einen BufferedReader um jeden Leser, der lesen einzuzuwickeln () -Operationen teuer, wie FileReaders und InputStreamReaders kann. Zum Beispiel:

BufferedReader in
   = new BufferedReader(new FileReader("foo.in"));

wird die Eingabe von der angegebenen Datei puffern. Ohne Pufferung, jeder Aufruf von read () oder readline () könnte dazu führen, Bytes aus der Datei gelesen werden, umgerechnet in Zeichen, und dann zurückgeführt, was sehr ineffizient sein kann. Programme, die DataInputStreams für Texteingabe kann durch Ersetzen jedes Datainputstream mit einem geeigneten BufferedReader lokalisiert werden.

Quelle: Link-

Es gibt verschiedene Möglichkeiten der Eingabe in Java unter wie:

1) BufferedReader 2) Scanner 3) Befehlszeilenargumente

BufferedReader Lesen aus einer Textzeicheneingabestrom, zu puffern, um Zeichen für die effiziente Lesen von Zeichen, Arrays zu liefern, und Linien.

Wo Scanner ist ein einfacher Text-Scanner, die primitiven Typen und Strings mit regulären Ausdrücken analysieren kann.

Wenn Sie einen einfachen Log-Leser schreiben Buffered Leser angemessen ist. wenn Sie einen XML-Parser schreiben Scanner ist die natürliche Wahl.

Weitere Informationen erhalten Sie unter:

http://java.meritcampus.com/t/240/Bufferedreader? tc = mm69

Die unten Antwort von von Console: JAVA Scanner vs BufferedReader

Wenn eine Eingabe von der Konsole lesen, gibt es zwei Möglichkeiten gibt, dies zu erreichen. Zuerst mit Scanner, eine andere mit BufferedReader. Beide haben unterschiedliche Eigenschaften. Es bedeutet, Unterschiede, wie es zu benutzen.

Scanner behandeltem Eingang als Token angegeben. BufferedReader gerade gelesen Zeile für Zeile gegebene Eingabe als String. Scanner es selbst bieten Parsing-Funktionen wie nextInt (), nextFloat ().

Aber was ist es, andere Unterschiede zwischen?

  • Scanner behandeltem Eingang als Token angegeben. BufferedReader als Stromleitung / String
  • Scanner Zeichen übersetzten gegebene Eingabe regex. Mit BufferedReader muss zusätzlichen Code schreiben
  • BufferedReader schneller als Scanner * kein Punkt. 2
  • Scanner ist nicht synchronisiert, BufferedReader Synchronized

Scanner sind mit seit JDK Version 1.5 höher.

Wann sollte Scanner verwenden oder Buffered Reader?

Schauen Sie sich die wichtigsten Unterschiede zwischen den beiden von ihnen, ein Token versehen verwenden, andere Stromleitung verwendet wird. Wenn Sie Fähigkeiten müssen Parsen verwenden Scanner statt. Aber ich bin noch komfortabler mit BufferedReader. Wenn Sie aus einer Datei, die Verwendung BufferedReader lesen müssen, weil es den Puffer verwenden, wenn eine Datei lesen. Oder Sie können BufferedReader als Eingabe für Scanner verwenden.

  1. BufferedReader wird wahrscheinlich geben Sie eine bessere Leistung (da Scanner auf Input basiert, Blick Quellen). ups, zum Lesen von Dateien verwendet es nio. Als ich nio Leistung gegen BufferedReader Leistung für große Dateien nio zeigt etwas bessere Leistung getestet.
  2. Für das Lesen von Datei try Apache Commons IO.

Ich ziehe Scanner, weil es nicht geprüfte Ausnahmen wirft und damit es die Nutzung führt zu einem schlankeren Code.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top