当您使用write(byte [] b)方法写入BufferedOutputStream时,将使用FilterOutputStream中的write方法。文档说:
“FilterOutputStream的write方法使用参数b,0和b.length调用三个参数的write方法。”
它指的是哪个带有三个参数的写方法? FilterOutputStream中的那个,还是BufferedOutputStream中的那个? (即写入是否实际缓冲?)。
我相信它,但我不确定。
答案 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不会不必要地复制数据。