306 votes

Scanner vs BufferedReader

Pour autant, je sais, les deux principales méthodes de lecture des données de type caractères d’un fichier en Java utilisant Scanner ou BufferedReader. Je sais aussi que le BufferedReader lecture fichiers efficace en utilisant un tampon afin d’éviter des opérations de disque physique. Mes questions sont :

  • Est-ce que Scanner effectue ainsi que BufferedReader ?
  • Pourquoi choisiriez-vous Scanner sur BufferedReader ou vica versa ?

216voto

Chandru Points 4770

Scanneur doit être utilisé pour analyser des jetons à partir du contenu du flux tandis que BufferedReader juste lit le flux de données et n’effectue aucune analyse spéciale.

En fait, vous pouvez passer un BufferedReader à un scanner comme source de caractères à analyser.

208voto

BalusC Points 498232

Dans la dernière JDK6 version/build (b27), l' Scanner a un petit tampon (1024 caractères), par opposition à l' BufferedReader (8192 caractères), mais c'est plus que suffisant.

Comme pour le choix, l'utilisation de l' Scanner si vous souhaitez analyser le fichier, utilisez l' BufferedReader si vous souhaitez lire le fichier ligne par ligne. Voir aussi le texte d'introduction de leur aforelinked de la documentation de l'API.

78voto

Jomoos Points 3391

Voir ce lien, ce qui suit est cité à partir de là:

Un BufferedReader est une classe simple signifiait efficacement les lire à partir de la sous-fifre de flux. Généralement, chaque demande de lecture faite d'un Lecteur comme un FileReader provoque une lecture correspondant demande à être faite à flux sous-jacent. Chaque appel à read() ou readLine() pourrait cause d'octets à lire dans le fichier, convertis en caractères, et puis est retourné, ce qui peut être très inefficace. Amélioration de l'efficacité de sensiblement si un Lecteur est déformé dans un BufferedReader.

BufferedReader est synchronisé, de sorte que les opérations de lecture sur un BufferedReader peuvent en toute sécurité être fait à partir de plusieurs threads.

Un scanner a en revanche beaucoup plus de fromage construit; c' peut faire tout ce qu'un BufferedReader peut faire et au même niveau de l'efficacité ainsi. Cependant, en plus d'un Scanner permet d'analyser le flux sous-jacent pour les types primitifs et les chaînes à l'aide régulière les expressions. Il peut aussi marquer le flux sous-jacent avec le caractère de votre choix. Il peut également faire avancer la numérisation de l' flux sous-jacent négligeant le délimiteur!

Un scanner n'est cependant pas thread-safe, il est à l'extérieur synchronisé.

Le choix de l'utilisation d'un BufferedReader ou un Scanner dépend du code vous écrivez, si vous écrivez une simple lecture du journal Tampon lecteur adéquat. Toutefois, si vous écrivez un analyseur XML Scanner est la plus naturelle.

Même lors de la lecture de l'entrée, si vous voulez accepter la saisie de l'utilisateur en ligne ligne et de dire il suffit de l'ajouter à un fichier, un BufferedReader est assez bon. D'autre part, si vous voulez accepter la saisie de l'utilisateur comme une commande avec de multiples options, puis l'intention d'effectuer différentes opérations selon la commande et les options spécifiées, un Scanner costume mieux.

42voto

Sujith PS Points 2866
  1. BufferedReader a significativement plus grande mémoire tampon de Scanner. Utiliser BufferedReader si vous souhaitez obtenir de longues chaînes à partir d'un flux, et d'utiliser Scanner si vous souhaitez analyser spécifiques type de jeton à partir d'un flux.

  2. Scanner pouvez utiliser marquer à l'aide de séparateur personnalisé et d'analyser les flux dans les types primitifs de données, tandis que d' BufferedReader ne peut que lire et stocker de la Chaîne.

  3. BufferedReader est synchrone alors que Scanner ne l'est pas. Utiliser BufferedReader si vous travaillez avec plusieurs threads.

19voto

Evgeniy Points 91

Je suggère d’utiliser BufferedReader pour lire le texte. Scanner de masque IOException tandis que BufferedReader elle lève immédiatement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X