在查看缓冲流的源码的时候,我们会发现它在底层创建了一个8196长度的字节数组,利用这个数组去进行数据的交互.
但是我们完全可以自己创建一个字节数组,对数据进行输入或输出,没必要再加上缓冲流啊?或者说,我们单纯使用缓冲流就可以用字节数组传输数据了,那为什么又要把这两个结合起来使用呢?
其实,从结果上来说,两者结合起来效率其实是更高的.
这里,我们从原理的角度解释一下:
缓冲流是在缓冲区中创建了一个字节数组,缓冲区是在内存当中的,效率很高,它创建的这个字节数组是用来储存输出流等传递过来的数据的,直到储存到8196长度时,它才会向外输出.而输出流向这个缓冲区传递数据时,如果是用字节数组进行的,那么效率就会更高.
总的来说,缓冲流就是在数据传递过程中加了一步,输出流向缓冲流造的缓冲区中传数据用字节流更快.缓冲流中创建的那个字节数组和其并没有任何关系.
所以,我们用最快的速度传数据,最好这么写:
BufferedInputStream bufferedInputStream = null;
BufferedOutputStream bufferedOutputStream = null;
try {
bufferedInputStream = new BufferedInputStream(new FileInputStream("D:\\0004.mp4"));
bufferedOutputStream = new BufferedOutputStream(new FileOutputStream("work1\\0004.mp4"));
byte[] bytes = new byte[1024];
int b;
while ((b = bufferedInputStream.read(bytes)) != -1){
bufferedOutputStream.write(bytes,0,b);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bufferedInputStream != null){
try {
bufferedInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (bufferedOutputStream != null){
try {
bufferedOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}```