Question

En ce que je sais, les deux méthodes les plus courantes de la lecture des données basées sur des caractères d'un fichier en Java en utilisant Scanner ou BufferedReader. Je sais aussi que les fichiers lire BufferedReader efficacement en utilisant un tampon pour éviter les opérations de disque physique. Mes questions sont les suivantes:

  • Est-ce que Scanner fonctionne aussi bien que BufferedReader?
  • Pourquoi choisir Scanner sur BufferedReader ou vice versa?
Était-ce utile?

La solution

Scanner est utilisé pour l'analyse des jetons à partir du contenu du flux en BufferedReader lit juste le cours d'eau et ne fait aucune analyse particulière.

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

Autres conseils

Dans le moment dernière version / build JDK6 (B27), le Scanner a un plus petit tampon ( 1024 caractères ) par opposition à la BufferedReader ( 8192 caractères ), mais il est plus que suffisant.

En ce qui concerne le choix, utilisez le Scanner si vous voulez parse le fichier, utilisez le BufferedReader si vous voulez lire la ligne de fichiers en ligne. Voir aussi le texte d'introduction de leurs API aforelinked documentation.

  • analyse syntaxique = interpréter l'entrée donné que les jetons (pièces). Il est capable de vous redonner des parties spécifiques directement int, string, décimal, etc. Voir aussi toutes ces méthodes de nextXxx() en classe Scanner.
  • Lecture = le streaming muet. Il ne cesse de vous redonner tous les personnages qui vous doivent à leur tour inspecter manuellement si vous souhaitez correspondre ou composer quelque chose d'utile. Mais si vous n'avez pas besoin de le faire de toute façon, alors la lecture est suffisante.

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

  

A BufferedReader est une classe simple destiné à lire efficacement de la   flux sous-fifre. En général, chaque demande de lecture faite d'un lecteur comme un   FileReader fait une demande de lecture correspondant à apporter à   flux sous-jacent. Chaque appel de lecture () ou readLine () pourrait   la cause octets à lire à partir du fichier, converti en caractères, et   puis de retour, qui peut être très inefficace. L'efficacité est améliorée   sensiblement si un lecteur est déformé dans un BufferedReader.

     

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

     

Un scanner d'autre part a beaucoup plus de fromage construit en elle; il   peut faire tout ce qu'un BufferedReader peut faire et au même niveau de   efficacité aussi bien. Cependant, en plus d'un scanner peut analyser la   flux sous-jacent pour les types primitifs et les chaînes en utilisant régulière   expressions. Il peut également tokenizer le flux sous-jacent à la   delimiter de votre choix. Il peut également faire l'analyse avant de la   flux sous-jacent sans tenir compte du delimiter!

     

Un scanner est cependant pas thread-safe, il doit être à l'extérieur   synchronisée.

     

Le choix d'utiliser un BufferedReader ou un scanner dépend du code   vous écrivez, si vous écrivez d'un simple lecteur de journal Buffered   lecteur est adéquat. Toutefois, si vous écrivez un analyseur XML Scanner   est le choix le plus naturel.

     

Même en lisant l'entrée, si vous voulez accepter la ligne d'entrée utilisateur par   ligne et dire simplement ajouter à un fichier, un BufferedReader est assez bon.   D'autre part, si vous voulez accepter l'entrée de l'utilisateur comme une commande avec   plusieurs options, et ensuite l'intention d'effectuer différentes opérations   en fonction de la commande et les options spécifiées, un scanner conviendra   mieux.

  1. BufferedReader a significativement plus grand que la mémoire tampon du scanner. Utilisez BufferedReader si vous voulez obtenir des chaînes longues d'un cours d'eau, et utiliser Scanner si vous voulez analyser type de jeton à partir d'un flux.

  2. Scanner peut utiliser tokenize à l'aide délimiteur personnalisé et analyser le flux dans les types primitifs de données, alors que BufferedReader ne peut lire et chaîne de magasin.

  3. BufferedReader est synchrone alors que Scanner n'est pas. Utilisez BufferedReader si vous travaillez avec plusieurs threads.

  4. Scanner cache IOException en BufferedReader jette immédiatement.

Je suggère d'utiliser BufferedReader pour la lecture du texte. Scanner cache IOException tout BufferedReader jette immédiatement.

Différence entre BufferedReader et Scanner sont suivants:

  1. BufferedReader est synchronisé , mais Scanner est non synchronisé .
  2. BufferedReader est thread-safe mais Scanner est pas thread-safe .
  3. BufferedReader a une plus grande mémoire tampon mais Scanner a plus petite mémoire tampon .
  4. BufferedReader est plus rapide mais Scanner est plus lent dans l'exécution .
  5. Code pour lire une ligne de la console:

    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();
    

Voici les différences entre BufferedReader et Scanner

  1. BufferedReader lecture seule des données, mais également des données scanner analyser.
  2. vous ne pouvez lire String à l'aide BufferedReader, mais vous pouvez lire int, long ou flotter à l'aide du scanner.
  3. BufferedReader est plus à partir du scanner, il existe de JDK 1.1 tout Scanner a été ajouté à la version 5 JDK.
  4. La taille du tampon de BufferedReader est grand (8 Ko) par rapport à 1KB du scanner.
  5. BufferedReader est plus approprié pour la lecture du fichier avec une longue chaîne tandis Scanner est plus approprié pour la lecture de petite entrée de l'utilisateur à partir de invite de commande.
  6. BufferedReader est synchronisé mais Scanner est pas, ce qui signifie que vous Scanner ne peut pas partager entre plusieurs threads.
  7. BufferedReader est plus rapide que Scanner parce qu'il n'a pas passé beaucoup de temps sur l'analyse syntaxique
  8. BufferedReader est un peu plus rapide par rapport à scanner
  9. BufferedReader est du package java.io et Scanner est du package java.util sur la base des points que nous pouvons choisir notre choix.

Merci

Les principales différences:

  1. Scanner

  • Un scanner de texte simple qui peut analyser les types primitifs et les chaînes en utilisant des expressions régulières.
  • Un casse Scanner son entrée en jetons en utilisant un modèle de séparation, qui, par défaut correspond à un espace. Les jetons obtenus peuvent alors être converties en valeurs de différents types en utilisant les différentes méthodes suivantes.

Exemple

 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(); 

affiche la sortie suivante:

 1
 2
 red
 blue 

La même sortie peut être généré avec ce code, qui utilise une expression régulière pour analyser les quatre jetons à la fois:

 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:

    • Le texte lit à partir d'un flux d'entrée de caractères, des caractères en mémoire tampon de manière à assurer la lecture efficace des caractères, des tableaux et des lignes.

    • La taille de la mémoire tampon peut être spécifié, ou peut être utilisé de la taille par défaut. La valeur par défaut est assez grand pour la plupart des cas.

En général, chaque demande de lecture faite d'un lecteur provoque une demande de lecture correspondant à apporter du caractère sous-jacent ou d'un flux octet. Il est donc conseillé d'envelopper un BufferedReader autour de tout lecteur dont les opérations de lecture () peut être coûteux, tels que FileReaders et InputStreamReaders. Par exemple,

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

en mémoire tampon l'entrée à partir du fichier spécifié. Sans mémoire tampon, chaque appel de lecture () ou readLine () pourrait provoquer octets à lire à partir du fichier, convertis en caractères, puis retournés, ce qui peut être très inefficace. Les programmes qui utilisent DataInputStreams pour la saisie de texte peuvent être localisées en remplaçant chaque DataInputStream avec un BufferedReader approprié.

Source: lien

Il existe différentes façons de prendre l'entrée en Java comme:

1) BufferedReader 2) Scanner 3) Arguments de ligne de commande

BufferedReader Lire le texte à partir d'un flux d'entrée de caractères, des caractères en mémoire tampon de manière à assurer la lecture efficace des caractères, des tableaux et des lignes.

Si Scanner est un scanner simple texte qui peut analyser les types primitifs et les chaînes en utilisant des expressions régulières.

si vous écrivez un simple lecteur de journal BufferedReader est adéquat. si vous écrivez un analyseur XML Scanner est le choix le plus naturel.

Pour plus d'informations s'il vous plaît se référer:

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

La réponse ci-dessous est tirée de lecture de la console: Scanner JAVA vs BufferedReader

Lors de la lecture d'une entrée de la console, il y a deux options existent pour y parvenir. Tout d'abord en utilisant Scanner, un autre en utilisant BufferedReader. Les deux ont des caractéristiques différentes. Cela signifie différences comment l'utiliser.

Scanner traité entrée donnée comme jeton. BufferedReader juste lu ligne par l'entrée de la ligne donnée sous forme de chaîne. Scanner elle-même fournir des fonctions d'analyse syntaxique tout comme nextInt (), nextFloat ().

Mais, ce qui est des différences entre autres?

  • Scanner traité entrée donné comme jeton. BufferedReader comme ligne de courant / String
  • Scanner entrée donné tokenized utilisant l'expression rationnelle. L'utilisation BufferedReader doit écrire du code supplémentaire
  • BufferedReader plus vite que Scanner * Point non. 2
  • Scanner n'est pas synchronisé, BufferedReader synchronisé

Scanner venir avec depuis la version 1.5 JDK supérieur.

Quand faut-il utiliser le scanner ou Buffered Reader?

Regardez les principales différences entre les deux, en utilisant un tokenizés, d'autres en utilisant la ligne de flux. Lorsque vous avez besoin de l'analyse des capacités, utiliser à la place du scanner. Mais, je suis plus à l'aise avec BufferedReader. Lorsque vous avez besoin de lire à partir d'un fichier, utilisez BufferedReader, car il est tampon d'utilisation lors de lecture d'un fichier. Ou vous pouvez utiliser BufferedReader comme entrée au scanner.

  1. BufferedReader va probablement vous donner de meilleures performances (car Scanner est basé sur InputStreamReader regarder, sources). ups, pour la lecture de fichiers qu'il utilise nio. Quand je l'ai testé les performances par rapport aux performances nio BufferedReader pour les grands fichiers nio montre un peu meilleures performances.
  2. Pour la lecture du fichier essayer Apache Commons IO.

Je préfère Scanner parce qu'il ne jette pas d'exceptions vérifiées et donc il est des résultats d'utilisation dans un code plus simple.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top