2010-07-08 22 views
3

devrais-je écrireEst-ce que ImageIO.write est tamponné?

BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream(file)); 
ImageIO.write(im, "JPEG", os); 

au lieu de

ImageIO.write(im, "JPEG", file); 

à savoir les opérations de fichiers ImageIO sont-elles mises en mémoire tampon par défaut ou non?

Merci!

+0

Y avait-il une certaine résolution? – YoK

+0

avez-vous trouvé quelque chose? – YoK

Répondre

1

Si vous transmettez un File, l'implémentation sous-jacente écrira directement sur un RandomAccessFile (créé en mode "rw"), donc pas de mise en mémoire tampon. Plus précisément, un FileImageOutputStream sera utilisé comme ImageOutputStream.

+0

Donc, devrais-je utiliser BufferedOutputStream pour l'optimisation ou id n'a pas de sens? –

+0

Comment le savez-vous? Est-ce documenté? Avez-vous une référence dans l'api-source? – aioobe

+0

@aioobe: Je ne crois pas que ce soit documenté, mais c'est dans la source. – kschneid

0

Je crois que cela dépend de la mise en œuvre spécifique du IIORegistry qui, je suppose, dépend du système.

Je m'attendrais à ce qu'il soit tamponné, mais je suppose que vous pourriez aller avec la première option pour être complètement sûr.

0

Vous devrez utiliser BufferedOutputStream (comme dans l'exemple 1 mentionné en question).

ImageIo.write n'est pas mis en mémoire tampon par défaut. Cela dépend de ce que vous lui passez dans les arguments. Dans le cas où l'objet File est passé, il ne sera pas tamponné en écriture.