从内存使用和性能角度来看,ByteArrayOutputStream与FileOutputStream的比较

6
我想要做的是从网络服务器下载文件。当我追踪代码时,两个程序员在同一场景下使用ByteArrayOutputStream和FileOutputStream以不同的方式下载文件。这些是:
- 情况1:使用ByteArrayOutputStream创建文件并下载它。 - 情况2:使用FileOutputStream在Web服务器下临时创建文件并下载它,然后删除该文件。
PS:情况2的文件比情况1的文件大。
我能否在这两种情况下都使用ByteArrayOutputStream?第二种情况使用FileOutputStream是否有意义?我想知道的是从性能和内存的角度来看。谢谢!

8
ByteArrayOutputStream 存储于内存中,而 FileOutputStream 则是存储于文件中。这带来的影响显而易见。 ByteArrayOutputStream 更快,但考虑一下下载一个 10GB 的文件…… 这似乎会在程序中产生安全漏洞——只需输入一个大文件即可。 - Boris the Spider
1
这完全取决于您要下载的文件大小。对于较小的文件,ByteArrayOutputStream是很好的选择。 - Santosh
3
将它们进行比较是荒谬的。一个仅靠内存,以总线速度运行且没有磁盘,另一个则使用尽可能多的磁盘,仅需少量内存,并以磁盘I/O速度运行。 - user207421
1
@BoristheSpider ByteArrayOutputStream由于使用byte[],所以仅限于略小于2GB的大小;) - Peter Lawrey
1个回答

3
将Boris The Spider和Peter Lawrey的内容结合起来作答: ByteArrayOutputStream在内存中,而FileOutputStream则在文件中。这个影响是显然的。ByteArrayOutputStream速度更快,但考虑下载一个10GB的文件...这看起来会给程序开启一个漂亮的安全漏洞 - 只需提供一个大文件即可。 此外,ByteArrayOutputStream限制了使用byte[]的大小不超过2GB。

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