ImageIO.write是否具有缓冲功能?

3

我应该写什么

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

替代

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

例如,ImageIO文件操作是否默认缓冲?谢谢!

你找到了什么吗? - YoK
3个回答

1
如果您传入一个File,底层实现将直接写入一个RandomAccessFile(以"rw"模式创建),因此不需要缓冲。具体来说,将使用FileImageOutputStream作为ImageOutputStream

那么,我应该使用BufferedOutputStream进行优化吗?还是说这没有意义? - Andrey Minogin
你是如何得知这个的?有文档记录吗?在 API 源代码中有参考资料吗? - aioobe
@aioobe:我不相信它有文档记录,但是它在源代码中。 - kschneid
@Andrey:如果你没有遇到性能问题,那么只使用文件的代码可能更简单/更清晰。如果你遇到了性能问题,那么值得调查一下。只要确保你对应用程序进行了分析,这样你就可以解决真正的问题。 - kschneid
@aioobe:javax.imageio.stream.FileImageOutputStream - kschneid

0

我相信这取决于IIORegistry的具体实现,我想这是与系统相关的。

我希望它被缓冲,但我想你可以选择第一种选项来确保完全确定。


0

您需要使用BufferedOutputStream(如问题中提到的例子1)。

ImageIo.write默认情况下不带缓冲。它取决于您在参数中传递什么。如果传递File对象,则不会进行缓冲写入。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接