这次的笔记关于什么呢?
BufferedInputStream&BufferedOutputStream!
对就是字节缓冲流。
这两个流类为IO提供了带缓冲区的操作,一般打开问价进行读取操作时,都会加上缓冲,这种流模式提高了IO的性能
举个例子:
从应用程序把输入的内容放入文件,就相当于把一缸水倒入另一缸中,
而FileOutputStream的write方法相当于一滴一滴的把水转移过去
DataOutputStream的write方法相当于一瓢一瓢的转移
BufferedOutputStream的write方法更方便,相当于一桶一桶的转移
还是那个复制文件内容的例子,我们来写一下代码
public static void copyByBuffered(File srcFile,File desFile) throws IOException {
BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(srcFile));
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(desFile));
int c;
while((c=bufferedInputStream.read())!=-1) {
bufferedOutputStream.write(c);
bufferedOutputStream.flush();//刷新缓冲区
}
bufferedInputStream.close();
bufferedOutputStream.close();
}
也是非常简单的。
这节我们学习了字节缓冲流
目前我关于文件复制,我们可以用三种方式
1、单个字节读取复制
2、字节批量读取复制
3、使用字节缓冲流读取复制
好,我们一个一个来看这三个方法的复制速度:
首先来看一下测试方法
public static void main(String[] args) throws IOException{
File file = new File("E:\\1.mp3");
File file2 = new File("E:\\2.mp3");
long start = System.currentTimeMillis();
IOUtils.copuByByte(file, file2);
//IOUtils.copyByByteArray(file, file2);
//IOUtils.copyByBuffered(file, file2);
long end = System.currentTimeMillis();
System.out.println(end - start);
}
第一个:单个字节读取复制,也就是IOUtils.copuByByte(file, file2);看一下代码:
//单个字节读取
public static void copuByByte(File srcFile,File desFile) throws IOException{
FileInputStream fileInputStream = new FileInputStream(srcFile);
FileOutputStream fileOutputStream = new FileOutputStream(desFile);
int b;
while((b=fileInputStream.read())!=-1) {
fileOutputStream.write(b);
fileOutputStream.flush();
}
}
看下运行结果:15万毫秒
第二个:字节批量读取复制
public static void main(String[] args) throws IOException{
File file = new File("E:\\1.mp3");
File file2 = new File("E:\\3.mp3");
long start = System.currentTimeMillis();
//IOUtils.copuByByte(file, file2);
IOUtils.copyByByteArray(file, file2);
//IOUtils.copyByBuffered(file, file2);
long end = System.currentTimeMillis();
System.out.println(end - start);
}
//单个字节读取
public static void copuByByte(File srcFile,File desFile) throws IOException{
FileInputStream fileInputStream = new FileInputStream(srcFile);
FileOutputStream fileOutputStream = new FileOutputStream(desFile);
int b;
while((b=fileInputStream.read())!=-1) {
fileOutputStream.write(b);
fileOutputStream.flush();
}
}
看一下运行结果:128毫秒,速度快了不止一点点啊!!
我们看一下第三个:使用字节缓冲流读取复制
public static void main(String[] args) throws IOException{
File file = new File("E:\\1.mp3");
File file2 = new File("E:\\4.mp3");
long start = System.currentTimeMillis();
//IOUtils.copuByByte(file, file2);
//IOUtils.copyByByteArray(file, file2);
IOUtils.copyByBuffered(file, file2);
long end = System.currentTimeMillis();
System.out.println(end - start);
}
//字节缓冲流读取
public static void copyByBuffered(File srcFile,File desFile) throws IOException {
BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(srcFile));
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(desFile));
int c;
while((c=bufferedInputStream.read())!=-1) {
bufferedOutputStream.write(c);
bufferedOutputStream.flush();//刷新缓冲区
}
bufferedInputStream.close();
bufferedOutputStream.close();
}
看一下运行结果:9万多毫秒,速度也是很慢
现在各位应该对这三种方法的效率有一定的认识了吧
满足o( ̄︶ ̄)o