繁体   English   中英

ByteArrayOutputStream和BufferedOutputStream之间的区别

[英]Difference between ByteArrayOutputStream and BufferedOutputStream

ByteArrayOutputStreamBufferedOutputStream都通过将数据放入内存中的数组来进行缓冲。 所以我的问题是

  1. 这两者之间有什么不同。
  2. 何时使用ByteArrayOutputStream以及何时使用BufferedOutputStream

有人可以帮助我解决上面两个问题,因为我对此感到困惑。

看看javadoc:

ByteArrayOutputStream

此类实现一个输出流,其中数据被写入字节数组。

BufferedOutputStream

该类实现缓冲输出流。 通过设置这样的输出流,应用程序可以将字节写入底层输出流,而不必为写入的每个字节调用底层系统。

所以,那些是非常不同的两件事:

  • 当你知道你有一些数据最终你需要作为字节数组时,你使用的第一个
  • 第二个只是任何其他类型的输出流的包装 - 它增加了缓冲。

这就是全部!

如果您想体验不同的行为:创建一个写入文件的缓冲行为和一个数组。 然后继续将字节推入每个字节。 数组1会在某个时刻导致内存问题,另一个可能会停止,直到所有磁盘空间都用完为止。

ByteArrayOutputStream将字节写入内存中的字节数组。 不到任何其他目的地,例如文件或网络套接字。 写入数据后,可以通过调用toByteArray()来获取字节数组。

BufferedOutputStream包装另一个底层OutputStream并为该底层流提供缓冲,以提高I / O操作的效率。 底层流可以是任何类型的OutputStream ,例如写入文件或网络套接字的OutputStream

为什么要使用缓冲:将大块数据写入文件系统比逐字节写入更有效。 如果您的程序需要编写许多小块数据,那么首先在缓冲区中收集这些小块然后立即将整个缓冲区写入磁盘会更有效。 这就是BufferedOutputStream为您自动执行的操作。

BufferedOutputStream允许使用缓冲区来提高性能。 当缓冲区填满时,调用write()方法会导致基础输出流write()方法调用,并且缓冲区的内容将写入目标。 BufferedOutputStreamwrite()方法的下一次调用将在缓冲区中存储字节,直到它再次填充。

通常用作包装器,例如:

FileOutputStream fos = new FileOutputStream("file.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos);
bos.write( ... );

因此,最小化了底层操作系统功能的调用次数。

ByteArrayOutputStream允许将字节流写入字节数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM