2017-05-06 218 views
1

ByteArrayOutputStreamBufferedOutputStream都通过将数据放入内存中的数组来进行缓冲。所以我的问题是ByteArrayOutputStream和BufferedOutputStream之间的区别

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

有人能帮助我在上面两个问题,因为我对这个困惑。

+0

这个问题是完全不同的,它说“在围绕ByteArrayOutputStream包装BufferedOutputStream而不是仅仅使用ByteArrrayOutputStream本身有什么优势吗?”我读了这个问题,但没有什么请再次检查 –

+0

只有在interner上发现的差异是BufferedOutputStream将数据写入另一个流。 ByteArrayOutputStream将数据写入字节数组。 –

+0

请你能解释一下吗? –

回答

3

只要看看的Javadoc:

ByteArrayOutputStream

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

BufferedOutputStream

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

所以,那些实际上有两个非常不同的东西:

  • 当你知道你有一些数据,到底你需要尽可能的字节数组你使用的第一个
  • 第二个仅仅是围绕任何其他类型的输出流的包装 - 它增加了缓冲。

这就是这一切!

如果您想体验不同的行为:创建一个写入文件的缓冲区和一个数组。然后只是继续推送字节到每一个。阵列一会在某个点引起内存问题,另一个可能不会停止,直到所有磁盘空间用完。

2

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

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

为什么您可能想要使用缓冲:将大块数据写入文件系统比逐字节写入效率更高。如果您的程序需要写入许多小块数据,首先将这些小块收集到缓冲区中,然后将整个缓冲区一次写入磁盘会更有效。这是BufferedOutputStream自动为你做的。

相关问题