将(byte [] b)写入BufferedOutputStream时会发生什么? (JAVA)

时间:2012-02-14 18:57:40

标签: java bufferedoutputstream

当您使用write(byte [] b)方法写入BufferedOutputStream时,将使用FilterOutputStream中的write方法。文档说:

“FilterOutputStream的write方法使用参数b,0和b.length调用三个参数的write方法。”

它指的是哪个带有三个参数的写方法? FilterOutputStream中的那个,还是BufferedOutputStream中的那个? (即写入是否实际缓冲?)。

我相信它,但我不确定。

2 个答案:

答案 0 :(得分:1)

BufferedOutputStream 覆盖 write(byte[], int, int)方法,以便调用新的覆盖。是的,写入是缓冲的。

答案 1 :(得分:1)

答案是肯定和否定。总结我的发现:有效结果与promise(“缓冲”)略有不同,因为流是否立即刷新取决于缓冲区的大小和每次调用存储的数据量。

以下内容来自更为详细的http://docs.oracle.com/javase/7/docs/api/java/io/BufferedOutputStream.html(强调我自己):

  

将指向的字节数组中的len个字节从offset 开始写入此缓冲的输出流

     

通常,此方法将来自给定数组的字节存储到此流的缓冲区中,根据需要将缓冲区刷新到基础输出流。但是,如果请求的长度至少与此流的缓冲区一样大,则此方法将刷新缓冲区并将字节直接写入基础输出流。因此,冗余的BufferedOutputStreams不会不必要地复制数据。