Scanner vs BufferedReader
Que je sache, les deux méthodes les plus courantes de la lecture de données basée sur les caractères à partir d'un fichier en Java à l'aide de Scanner
ou BufferedReader
. Je sais aussi que la BufferedReader
lire des fichiers de manière efficace à l'aide d'un tampon pour éviter de faire des opérations sur le disque dur. Mes questions sont les suivantes:
- Ne
Scanner
fonctionne aussi bien que lesBufferedReader
? - Pourquoi voudriez-vous choisir
Scanner
surBufferedReader
ou vice-versa?
- En général j'ai aussi utiliser le Scanner pour la lecture de la norme dans ('Scanner = new Scanner(System.en) " sent beaucoup plus propre). Vous ne savez pas si c'est en fait de moins en moins efficace, mais depuis la lecture de mst chez les bloque, je ne peux pas imaginer l'efficacité de Scanner serait le problème.
Vous devez vous connecter pour publier un commentaire.
Scanner
est utilisé pour l'analyse des jetons à partir du contenu du flux, tandis queBufferedReader
se contente de lire le flux et ne faire aucune spéciale d'analyse.En fait, vous pouvez passer une
BufferedReader
à unscanner
comme la source de caractères à analyser.Scanner
dépend en fin de compte quelque chose d'autre pour son entrée, qui pourrait bien être synchronisés.En dernière JDK6 version/build (b27), le
Scanner
a un petit tampon ( 1024 caractères ), par opposition à laBufferedReader
(8192 caractères), mais c'est plus que suffisant.Que le choix, l'utilisation de la
Scanner
si vous voulez analyser le fichier, utilisez leBufferedReader
si vous voulez lire le fichier ligne par ligne. Voir aussi le texte d'introduction de leur aforelinked de la documentation de l'API.nextXxx()
méthodes deScanner
classe.readInt();
readFloat(); etc. Maintenant obtenu qu'est-ce que la moyenne de l'analyse. et BalusC pouvez-vous donner peu de temps pour moi juste 10 minutes dans la salle de chat, je veux demander à peu au sujet de la mise en mémoire tampon, la façon dont il fonctionne.BufferedReader
Scanner du constructeur? est-ce une bonne idée?Voir ce lien, qui suit est cité à partir de là:
BufferedReader
a significativement plus grande mémoire tampon de Scanner. UtilisationBufferedReader
si vous souhaitez obtenir de longues chaînes à partir d'un flux, et l'utilisationScanner
si vous souhaitez analyser spécifiques type de jeton à partir d'un flux.Scanner
pouvez utiliser marquer à l'aide de séparateur personnalisé et d'analyser les flux dans les types primitifs de données, tandis queBufferedReader
ne peut que lire et stocker la Chaîne.BufferedReader
est synchrone alors queScanner
ne l'est pas. UtilisationBufferedReader
si vous travaillez avec plusieurs threads.Scanner
cache IOException toutBufferedReader
jette immédiatement.Je suggère l'utilisation de
BufferedReader
pour la lecture de texte.Scanner
cacheIOException
toutBufferedReader
jette immédiatement.Différence entre BufferedReader et Scanner sont les suivantes:
Code pour lire une ligne de la console:
BufferedReader:
Scanner:
Suivantes sont les différences entre BufferedReader et Scanner
long ou flotteur à l'aide d'un Scanner.
Scanner a été ajouté sur le JDK 5.
de Scanner.
alors que le Scanner est plus adapté à la lecture de la petite entrée de l'utilisateur à partir de
l'invite de commande.
ne peut pas partager Scanner entre plusieurs threads.
sur l'analyse
sur la base des points, nous pouvons choisir notre choix.
Grâce
Les Principales Différences:
Exemple
imprime le résultat suivant:
Le même résultat peut être généré avec ce code, qui utilise une expression régulière pour analyser toutes les quatre jetons à la fois:
BufferedReader:
Lit le texte à partir d'un personnage-flux d'entrée, de mise en mémoire tampon de caractères de manière à fournir pour l'efficacité de la lecture des caractères, des tableaux, et des lignes.
La taille de la mémoire tampon peut être spécifié ou la taille par défaut peut être utilisé. La valeur par défaut est assez grand pour la plupart des besoins.
En général, la lecture de chaque demande d'un Lecteur provoque un correspondant demande de lecture de la sous-jacentes de caractère ou de flux d'octets. Par conséquent, il est conseillé d'envelopper un BufferedReader autour de n'importe quel Lecteur dont la lecture() les opérations peuvent être coûteux, tels que FileReaders et InputStreamReaders. Par exemple,
sera le tampon d'entrée à partir du fichier spécifié. Sans mise en mémoire tampon, chaque appel à read() ou readLine() pourrait causer des octets à lire dans le fichier, convertis en caractères, et puis est retourné, ce qui peut être très inefficace.
Les programmes qui utilisent DataInputStreams pour saisir un texte peut être localisée en remplaçant chaque DataInputStream avec un BufferedReader.
Source:Lien
Il y a différentes façons de prendre des entrées en java comme:
1) BufferedReader 2) Scanner 3) Arguments De Ligne De Commande
BufferedReader Lire le texte de caractère-flux d'entrée, de mise en mémoire tampon de caractères de manière à fournir pour l'efficacité de la lecture des caractères, des tableaux, et des lignes.
Où le Scanner est un texte simple scanner qui peut analyser les types primitifs et les chaînes à l'aide d'expressions régulières.
si vous écrivez une simple lecture du journal Tampon lecteur est adéquate. si vous écrivez un analyseur XML Scanner est la plus naturelle.
Pour plus d'informations, veuillez consulter:
http://java.meritcampus.com/t/240/Bufferedreader?tc=mm69
La réponse ci-dessous est extrait de Lecture à partir de la Console: JAVA Scanner vs BufferedReader
Lors de la lecture des données d'entrée de la console, il y a deux options existent pour y parvenir. La première utilisation de
Scanner
, l'autre à l'aideBufferedReader
. Deux d'entre eux ont des caractéristiques différentes. Cela signifie différences comment l'utiliser.Scanner traités d'entrée donné comme gage. BufferedReader viens de lire ligne par ligne d'entrée donné, comme une chaîne de caractères. Scanner auto fournir des capacités d'analyse tout comme nextInt(), nextFloat().
Mais, qu'est-ce que d'autres différences entre les deux?
Scanner venir avec depuis la version de JDK 1.5 supérieur.
Quand faut utiliser le Scanner, ou avec Tampon Lecteur?
Regarder les principales différences entre les deux d'entre eux, une aide sous forme de jeton, d'autres à l'aide de flux en ligne. Lorsque vous avez besoin de l'analyse des capacités, l'utilisation du Scanner à la place. Mais, je suis plus à l'aise avec BufferedReader. Lorsque vous avez besoin de lire un Fichier, utilisez BufferedReader, parce que c'est l'utilisation de la mémoire tampon lors de la lecture d'un fichier. Ou vous pouvez utiliser BufferedReader comme entrée pour le Scanner.
BufferedReader vous donnera probablement de meilleures performances (car le Scanner est basé sur InputStreamReader, regardez les sources).ups, pour la lecture de fichiers qu'il utilise nio. Quand je l'ai testé nio performance contre BufferedReader de performance pour les gros fichiers nio montre un peu de meilleures performances.Je préfère
Scanner
car il ne jette pas vérifié les exceptions et, par conséquent, c'est l'utilisation des résultats dans une plus grande rationalisation du code.