Scanner vs InputStreamReader
Personne ne sais si il n'y a aucune différence en matière de performance entre les deux méthodes de lecture du fichier d'entrée ci-dessous?
Merci.
1) Lecture d'un fichier avec Scanner et Fichier
Scanner input = new Scanner(new File("foo.txt"));
2) Lecture d'un fichier avec InputStreamReader et FileInputStream
InputStreamReader input = new InputStreamReader(new FileInputStream("foo.txt"));
Connexes: stackoverflow.com/questions/2231369/scanner-vs-bufferedreader
Connexes: Scanner v. StreamTokenizer.
Connexes: Scanner v. StreamTokenizer.
OriginalL'auteur One Two Three | 2012-04-08
Vous devez vous connecter pour publier un commentaire.
Le premier point est que ni de ces exemples de code lire un fichier. Cela peut sembler idiot ou incorrect, mais c'est vrai. Ce qu'ils font est d'ouvrir un fichier en lecture. Et en termes de ce qu'ils font en réalité, il n'y a probablement pas une énorme différence dans leur efficacité.
Quand il s'agit de la lecture du fichier, la meilleure approche à utiliser dépend de ce que le dossier contient, sous quelle forme les données doivent être dans votre en mémoire des algorithmes, etc. Cela permettra de déterminer si il est préférable d'utiliser
Scanner
ou un rawReader
, à partir d'un point de vue des performances et plus important à partir de la perspective de rendre votre code fiable et maintenable.Enfin, les chances sont qu'il ne fera pas une différence significative à la performance globale de votre code. Ce que je dis, c'est que vous êtes à l'optimisation de votre application prématurément. Vous êtes mieux de l'ignorance de la performance et de choisir la version qui va faire le reste de votre code plus simple. Lorsque l'application fonctionne, profil avec certains représentant des données d'entrée. Le profilage vous indiquera le temps est consacré à la lecture du fichier, en termes absolus et par rapport au reste de l'application. Cela vous indiquera si elle est la valeur de l'effort à essayer d'optimiser la lecture du fichier.
Le seul bit de la performance conseil que je donnerais, c'est que caractère par caractère de la lecture à partir d'un tampon du flux d'entrée ou de lecteur est inefficace. Si le fichier doit être lu de cette façon, vous devez ajouter un BufferedReader de la pile.
OriginalL'auteur Stephen C
En termes de performances, le Scanner est certainement le plus lent, au moins à partir de mon expérience. Il est fait pour l'analyse, de ne pas le lire d'énormes blocs de données. InputStreamReader, avec un tampon assez grand, peut effectuer sur un pied d'égalité avec BufferedReader, je me souviens d'être quelques fois plus vite que le Scanner pour la lecture à partir d'un dictionnaire de la liste. Voici une comparaison entre BufferedReader et InputStreamReader. Rappelez-vous que BufferedReader est quelques fois plus rapide qu'un Scanner.
OriginalL'auteur Kira Chow
Une différence, et le principal, je pense, c'est qu'avec le BufferedReader/InputStreamReader vous pouvez lire le document en entier, caractère par caractère, si vous le souhaitez. Avec le scanner, ce n'est pas possible. Cela signifie qu'avec le InputStreamReader vous pouvez avoir plus de contrôle sur le contenu du document. 😉
Si votre point est que la réponse si hors-sujet, je suis en désaccord. Il veut entendre parler de performance et obtient également le savoir la différence entre les deux qui sera en fin de compte que des avantages pour sa compréhension de la différence entre les deux..
OriginalL'auteur Andrey Luiz