Spécifique différence entre bufferedreader et filereader
Je voudrais savoir la différence exacte entre BufferedReader
et FileReader
.
Je sais que BufferedReader
est beaucoup plus efficace, par opposition à FileReader
, mais quelqu'un peut-il expliquer pourquoi (spécifiquement et en détail)? Merci.
Vous devez vous connecter pour publier un commentaire.
De manière simple:
Un FileReader de classe est un outil pour lire des caractères dans un Fichier. La classe BufferedReader peuvent s'enrouler autour de Lecteurs, comme FileReader, pour le tampon d'entrée et améliorer l'efficacité. De sorte que vous n'utilisez pas l'un sur l'autre, mais les deux en même temps en passant l'objet FileReader à la BufferedReader constructeur.
Détail
FileReader est utilisé pour la saisie des données de caractère à partir d'un fichier disque. Le fichier d'entrée peut être un banal ASCII, un octet par caractère fichier texte. Un Lecteur de flux traduit automatiquement les caractères à partir de la disquette de format de fichier dans ce format char. Les caractères dans le fichier d'entrée peut être d'autres alphabets pris en charge par le format UTF, auquel cas il y aura jusqu'à trois octets par caractère. Dans ce cas, également, des personnages à partir du fichier sont convertis en format char.
Comme à la sortie, il est de bonne pratique d'utiliser un tampon pour améliorer l'efficacité. Utilisation BufferedReader pour cela. C'est la même classe que nous avons été à l'aide de la saisie au clavier. Ces lignes devrait vous être familier:
Ces lignes de créer un BufferedReader, mais le connecter à un flux d'entrée à partir du clavier, pas dans un fichier.
Source: http://www.oopweb.com/Java/Documents/JavaNotes/Volume/chap84/ch84_3.html
Tout d'abord, Vous devez comprendre le "streaming" en Java, car tous les "lecteurs" en Java sont construites sur ce concept.
Fichier Streaming
De diffusion des fichiers est effectuée par le FileInputStream objet en Java.
Cette objets en lit un octet(8 bits) au moment et à l'écrit dans le fichier donné.
Une pratique de l'application de la il serait de travailler avec des données binaires brutes/fichiers de données, tels que des images ou des fichiers audio (utiliser AudioInputStream au lieu de FileInputStream pour les fichiers audio).
En revanche, pour les fichiers texte, il est très gênant et plus lent, à cause d'une boucle dans un octet à la fois, puis faire un peu de traitement et de stocker le traité de l'octet de retour est long et fastidieux.
Vous devez également fournir le jeu de caractères du fichier texte, j'.e si les personnages sont dans latine ou Chinois, etc. Sinon, le programme de décoder et de coder sur 8 bits à la fois, et vous verriez bizarre caractères affichés sur l'écran ou écrites dans le fichier de sortie (si un char est de plus de 1 octet de long).
La Lecture Du Fichier De
C'est juste une façon élégante de dire "Fichier de transmission en continu" avec inclusive charset l'appui (j'.e pas nécessaire de définir le jeu de caractères, comme précédemment).
La FileReader classe est spécifiquement conçu pour traiter des fichiers texte.
Comme vous l'avez vu précédemment, la diffusion en continu de fichiers est préférable de traiter avec des données binaires brutes, mais pour l'amour de texte, il n'est pas très efficace.
Donc le Java-dudes ajouté le FileReader classe, pour traiter spécifiquement les fichiers texte. Il lit 2 octets (ou 4 octets, dépend du jeu de caractères) à la fois. Une remarquable amélioration considérable par rapport au précédent FileInputStream!!
de sorte que le streaming de l'opération, c'est comme cela,
Veuillez noter que les Deux classes d'utiliser une variable de type entier pour stocker la valeur récupérées à partir du fichier d'entrée (de sorte que chaque char est converti en un entier lors de l'extraction et de retour à la char pendant l'enregistrement).
Le seul avantage ici est que, depuis cette classe traite avec les fichiers de texte, de sorte que vous n'avez pas à spécifier le texte du fichier charset et quelques autres propriétés. C'est un out-of-the-box solution, pour la plupart des fichiers de texte le traitement des cas. Il prend également en charge de l'internationalisation et de la localisation.
Mais encore une fois, il est encore trop lent (Imagerie de la lecture 2 octets à la fois et en boucle à travers elle!).
De mise en mémoire tampon des flux
Pour s'attaquer au problème du continu en boucle sur un octet ou 2. La Java-dudes ajouté un autre spectaculaire de la fonctionnalité. "Pour créer un tampon de données, avant de les traiter."
Le concept est à peu près semblables quand un utilisateur transmet un vidéo sur YouTube. Une vidéo est mise en mémoire tampon avant de jouer, afin de fournir une vidéo sans faille expérience de visionnage. (Tho, le navigateur conserve de mise en mémoire tampon jusqu'à ce que l'ensemble de la vidéo est tamponné à l'avance.) La même technique est utilisée par les BufferedReader classe.
La BufferedReader objet prend une FileReader objet que d'une entrée qui contient toutes les informations nécessaires concernant le fichier texte qui doit être lu. (comme le chemin d'accès au fichier et le jeu de caractères.)
Lors de la "lecture" d'instruction est donnée à la BufferedReader objet, il utilise la FileReader objet pour lire les données à partir du fichier. Lorsqu'une instruction est donnée, la FileReader objet lit de 2 (ou 4) octets à la fois et retourne les données de la BufferedReader et le lecteur conserve le faire jusqu'à ce qu'elle frappe '\n' ou '\r\n' (la fin de La ligne de symbole).
Une fois qu'une ligne est mise en mémoire tampon, le lecteur attend patiemment, jusqu'à ce que l'instruction à l'effet tampon de la ligne suivante est donnée.
Pendant ce temps, Le BufferReader objet crée un mémoire spécial endroit (Sur la RAM), appelé "Tampon", et stocke toutes les données extraites à partir de la FileReader objet.
Ici et maintenant, au lieu de lire 2 octets à la fois, une ligne entière est récupérée et stockée dans la mémoire vive quelque part, et lorsque vous avez terminé avec le traitement des données, vous pouvez stocker l'ensemble de la ligne vers le disque dur. Donc, il rend le processus beaucoup plus rapide que de le faire de 2 octets pour un temps.
Mais encore une fois, pourquoi avons-nous besoin de passer de l'objet FileReader à la BufferReader? Nous ne pouvons pas simplement dire "tampon ce fichier" et le BufferReader serait de prendre soin de tout le reste? ne serait-ce pas une douce?
Bien, le BufferReader classe est créée dans une manière qu'il ne sait comment créer un tampon et de stocker les données entrantes. Il n'a pas d'importance de l'objet, où les données proviennent de.
Donc dit que, Lorsque vous fournissez l'objet FileReader en entrée, elle tamponne le fichier, de la même façon si vous fournissez le InputStreamReader comme un objet, elle tamponne le Terminal/Console de saisie des données jusqu'à ce qu'il frappe une nouvelle ligne de symbole. tels que,
De cette façon, vous pouvez lire (ou tampon) plusieurs flux avec la même BufferReader classe, tels que des fichiers texte, des consoles, des imprimantes, des réseaux de données, etc, et tout ce que vous avez à retenir est,
à imprimer tout ce que vous avez mis en mémoire tampon.
Reader
objet.System.in
est un flux d'entrée. De vérifier la accepté de répondre.FileInputStream
: Vous devez également fournir le jeu de caractères du fichier texte. C'est exactement ce que cette classe n'est pas capable de.BufferedReader nécessite un Lecteur, qui FileReader est - il descend de InputStreamReader, qui descend du Lecteur.
FileReader - lire des fichiers de personnage
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."
http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html
http://docs.oracle.com/javase/7/docs/api/java/io/FileReader.html
Fait BufferedReader rend l'utilisation de Lecteurs comme FileReader.
Classe FileReader aide à l'écriture sur le fichier, mais son efficacité est faible, car il a yo retrive un caractère à la fois à partir d'un fichier, mais BufferedReader prend des blocs de données et de les stocker dans la mémoire tampon de sorte qu'au lieu de retriving un caractère à la fois à partir d'un fichier retrival devient facile à l'aide de la mémoire tampon.
Bufferedreader - méthode que vous pouvez utiliser effectivement comme un substitut pour Scanner méthode, obtient fichier, obtient d'entrée.
FileReader - comme le nom le suggère.