FileWrite BufferedWriter et PrintWriter combinés
Ok, donc je suis en train d'apprendre sur l'I/O, et j'ai trouvé le code suivant dans l'une des diapositives. quelqu'un peut-il expliquer pourquoi il est nécessaire d'avoir un FileWrite, BufferedWriter et PrintWriter? Je sais BufferedWriter est pour le tampon de sortie et mettre tout ça à la fois, mais pourquoi utiliser FileWriter et PrintWriter ? dont ils ont très bien faire la même chose avec un peu de différence dans la gestion d'erreur, etc?
Et aussi pourquoi ils passent bw
à PrintWriter
?
FileWriter fw = new FileWriter (file);
BufferedWriter bw = new BufferedWriter (fw);
PrintWriter outFile = new PrintWriter (bw);
source d'informationauteur Ahoura Ghotbi
Vous devez vous connecter pour publier un commentaire.
Sans doute qu'ils sont à l'aide d'un
FileWriter
parce qu'ils veulent écrire dans un fichier. Les deuxBufferedWriter
etPrintWriter
à être accordé à un autre écrivain à écrire à l' - vous besoin certains de destination finale.(Personnellement je n'aime pas
FileWriter
car il ne vous permet pas de spécifier l'encodage. Je préfère utiliserFileOutputStream
enveloppé dans unOutputStreamWriter
mais c'est un autre sujet).BufferedWriter
est utilisé pour la mise en mémoire tampon, comme vous le dites - même si elle n'a pas de tampon tous la sortie, juste un montant fixe (la taille de la mémoire tampon). Elle crée des "trapus" écrit à la sous-jacentes de l'écrivain.Que pour l'utilisation de
PrintWriter
- eh bien, qui expose quelques méthodes supplémentaires tels queprintln
. Personnellement je n'aime pas comme il avale des exceptions (à vous de vérifier explicitement aveccheckError
qui n'est toujours pas donner les détails et que je ne pense pas que j'ai jamais vu utilisé), mais encore, cela dépend de ce que vous faites. LePrintWriter
est passé leBufferedWriter
comme son destination.Donc le code ci-dessous dans la section que vous avez montré qui va sans doute écrire à la
PrintWriter
qui va écrire à l'BufferedWriter
qui (lorsque sa mémoire est pleine, ou il est rincé ou fermé) écrire à laFileWriter
ce qui permettra de convertir les données de caractère en octets sur le disque.De la Docs:
Vous pouvez comprendre à partir de ce qu'un
BufferedWriter
est un moyen efficace pour écrire des trucs.Un
FileWriter
objet est passé à laBufferedWriter
que l'intention ici est d'écrire à certains fichier de sortie à l'aide d'unBufferedWriter
.Et enfin, un
PrintWriter
est utilisé pourprint*
méthodes commeprintln()
.PrintWriter de ici
de la déclaration ci-dessus, il semble que la principale raison de l'utilisation PrintWriter est d'obtenir l'accès de toutes les méthodes de
PrintStream
commeprintln()
,println(char [] x)
etc.BufferedWriter, Vous avez raison, C'est l'un de la meilleure façon de les écrire dans un fichier, car il sera tamponné le personnage dans la mémoire virtuelle avant de les écrire dans un fichier directement et est venu avec un
newLine()
méthode.FileWriter de ici
.
D'habitude, ce genre de l'Écrivain chaînage est à propos de l'abstraction.
PrintWriter
ont quelque chose d'utileprint
etprintln
méthodes qui peut être pratique si vous voulez imprimer des Chaînes de caractères et de lignes d'un Fichier. En travaillant directement avecFileWriter
vous auriez à utiliser une approche plus "bas niveau" de l'API. Et comme vous le ditesBufferedWriter
est sur le tampon. Donc, c'est essentiellement une question de ce que vous voulez de sortie pour le fichier, et quel est le niveau d'abstraction que vous préférez.FileWriter
est tout simplement d'écrire en texte brut(sans mise en forme), il n'utilise pas de mécanisme tampon, tout ce qui vient son chemin, il écrit simplement.BufferedWriter
est un wrapper pourWriter
classes de lui permettre d'être en mesure d'utiliser la mémoire tampon de la fonctionnalité (pour optimiser IO).PrintWriter
imprime du texte formaté, vous pouvez fournir la chaîne de format avec les données pour les imprimer, même si elle peut travailler directement avec toutWriter/OutputStream
juste pour donner de mise en mémoire tampon,Writer/OutputStream
est le 1er transmis àBufferedWriter
puis pour avoir mis en forme le texte est passé àPrintWriter
Les objets sont emballés dans cet ordre parce que vous voulez utiliser la ultrapériphériques PrintWriter pour son plus sophistiqué de mise en forme. BufferedWriter doit être enroulé sur quelque chose. Donc FileWriter, en conséquence, est ce que BufferedWriter roulés et le plus proche du centre de l'objet.