Ich verstehe, was Scanner gut ist, und auch wann Scanner und wann BufferedReader zu verwenden ist. Ich lese eine andere, aber in gewisser Hinsicht ähnliche Frage Scanner vs. BufferedReader
Warum ist der Scanner so langsam, wenn ich von der Eingabe lese? Ich nehme an, es hat damit zu tun, dass es im Scanner einen kleinen Puffer gibt, aber hier bin ich verloren. Das ursprüngliche Problem ist von Codechef , aber ich bin nicht an dieser Lösung interessiert.
Hier ist ein Codebeispiel mit einer gegebenen Eingabe: Eingabe:
Und der Code
%Vor%Wenn ich denselben Code mit Scanner lese, ist es langsam.
Klassen / Methoden der oberen Ebene sind in der Regel langsamer als Klassen / Methoden der unteren Ebene.
Auf dieselbe Art und Weise können Sie fragen, warum die Suche mit regular expressions
langsamer ist als bei
Suche mit String.indexOf()
. Eigentlich habe ich solche Fragen hier auf SO gesehen.
Je spezialisierter Ihre Klasse / Methode ist, desto besser kann sie funktionieren.
Es tut z.B. nur eine einfache Sache, aber es geht schnell und effizient.
Allgemeinere Klassen / Verfahren tun z.B. 10-20 verschiedene Dinge, also sie
sind kraftvoller, aber dadurch langsamer.
Ich spreche im Allgemeinen hier, ich habe Scanner
und BufferedReader
nicht selbst verglichen.
Neben dem, was bereits gesagt wurde Scannerfokus ist ein Schweizer Taschenmesser, es ist sehr viel komplexer und in einfachen Fällen von BufferedReader abgedeckt, dass zusätzliche Gadgets es belasten. Es ist, als ob man einen Flugzeugträger schickt, um eine Ratte zu töten.
Wie in Ihrer Frage erwähnt, wo Sie eine andere Frage stellen. Der Scanner führt zusätzliche Aufgaben aus, z. B. das Analysieren von Ganzzahlen und Zeichen. Der gepufferte Leser liest eine Roheingabe. Was es liest, ist was es gibt.
Ich hoffe, ich habe geholfen,
Jarod
Einige gut gewählte Tipps, warum Scanner langsamer ist, finden Sie in Scanner vs. BufferedReader .
Dieser Leistungsunterschied kann in einigen Fällen wie der Wettbewerbsprogrammierung kritisch sein. Daher hat Codeforces zahlreiche Beiträge mit benutzerdefinierten schnelleren Eingabe-Parsern wie hier , hier (mit Benchmark) und hier .
Tags und Links java bufferedreader java.util.scanner