内部的缓冲byte[]buffer,定义的大小为4096,如果要写的io流内容超过这个大小呢
贴个源码:
public static int copy(InputStream input, OutputStream output) throws IOException {
long count = copyLarge(input, output);
if (count > Integer.MAX_VALUE) {
return -1;
}
return (int) count;
}
public static long copyLarge(InputStream input, OutputStream output)
throws IOException {
return copyLarge(input, output, new byte[DEFAULT_BUFFER_SIZE]);//大小为4096
}
public static long copyLarge(InputStream input, OutputStream output, byte[] buffer)
throws IOException {
long count = 0;
int n = 0;
while (EOF != (n = input.read(buffer))) {
output.write(buffer, 0, n);
count += n;
}
return count;
}
也没看见对buffer有什么别的处理呀?如果buffer大小不够呢?
关键看这里
while (EOF != (n = input.read(buffer)))
文档里是这么说的:
就是说每次最多读4096字节,如果多于4096字节会由while循环读取多次
你觉得缓冲区应该有多大?如果你要复制一个几百MB的文件,那缓冲区也要有几百MB大小?
缓冲区就像一个推车,来往于i/o端,运送数据,作用就是减少了来往的次数,减少了开销。