2013-07-27 1 views
6

Je voudrais savoir si FileWriter est tamponné ou non.FileWriter vs BufferedWriter

En this SO question, il semble qu'il est cependant en this question il semble donc que ce n'est pas. (Ce serait un appel système pour chaque écriture de temps (..) est appelée.

Donc, fondamentalement, . la lecture de ces deux Q & AI suis un peu confus Quelqu'un est-il en mesure d'expliquer clairement à

Merci à l'avance

EDIT:. problème résolu en lisant this API dont je cite la partie pertinente:

Chaque appel d'une méthode d'écriture() provoque le convertisseur de codage être invoqué sur le caractère donné (s). Les octets résultants sont accumulés dans un tampon avant d'être écrits dans le flux de sortie sous-jacent . La taille de ce tampon peut être spécifiée, mais par défaut, il est suffisamment grand pour la plupart des applications. Notez que les caractères passés aux méthodes write() ne sont pas mis en mémoire tampon.

Pour une efficacité maximale, pensez à envelopper un OutputStreamWriter dans un BufferedWriter afin d'éviter les invocations fréquentes de convertisseurs. Pour par exemple:

Writer out = nouveau BufferedWriter (nouveau OutputStreamWriter (System.out));

Étant donné que FileWriter étend OutputStreamWriter, il s'applique également à celui-ci.

Merci pour votre temps cependant, je suis conscient que j'ai demandé quelque chose de très spécifique.

Répondre

0

FileWriter est pas gardé en mémoire, vous devez utiliser un BufferedWriter comme emballage:

final int myBufferSize = 2048; 

Writer myWriter = new BufferedWriter(new FileWriter, myBufferSize); 
+0

qu'en est-il de la taille du tampon par défaut? – Rollerball

0

Je conseillerais d'utiliser toujours un BufferedWriter. Il vous permet de contrôler la taille réelle de la mémoire tampon et vous pouvez garantir que, quelle que soit la JVM que vous utiliserez, les E/S seront mises en mémoire tampon, ce qui apportera une énorme amélioration des performances des E/S.

+0

Ok mais qu'en est-il de FileWriter est-il en mémoire tampon? Il a seulement ce fameux byte-buffer standard? Comment ça marche? est la JVM qui la gère? – Rollerball

+0

Une apparence dans le code JDK 1.7 a montré un writeBuffer dans la classe de base Writer. Donc, tous les écrivains ont ce tampon. Le BufferedWriter utilise un second tampon privé char cb []; Cela conduit à la conclusion que ce tampon caché peut ne pas faire partie de toutes les implémentations JDK (qu'en est-il d'android?) – morpheus05

+1

Non. La méthode write est surchargée dans OutputStreamWriter. La mise en mémoire tampon se passe dans le StreamEncoder utilisé par OutputStreamWriter, qui code les caractères en octets. –

Questions connexes