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.