关于缓冲流效率有几个小问题
package com.imooc.flie; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class FileOutputDemo2 { //文件的拷贝 public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("test.jpg"); BufferedInputStream bis = new BufferedInputStream(fis); FileOutputStream fos = new FileOutputStream("test_copy.jpg"); BufferedOutputStream bos = new BufferedOutputStream(fos); int n = 0; byte[] b = new byte[1024]; long startTime = System.currentTimeMillis(); bos.write(b); bos.flush(); while ((n = (fis.read(b))) != -1) { fos.write(b, 0, n); } long endTime = System.currentTimeMillis(); System.out.println(endTime - startTime); fis.close(); fos.close(); bos.close(); bis.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
package com.imooc.flie;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputDemo1 {
//文件的拷贝
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("test.jpg");
BufferedInputStream bis = new BufferedInputStream(fis);
FileOutputStream fos = new FileOutputStream("test_copy.jpg");
BufferedOutputStream bos = new BufferedOutputStream(fos);
int n = 0;
byte[] b = new byte[1024];
long startTime = System.currentTimeMillis();
while ((n = (fis.read(b))) != -1) {
fos.write(b, 0, n);
}
long endTime = System.currentTimeMillis();
System.out.println(endTime - startTime);
fis.close();
fos.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Demo2的是加了缓冲流的,Demo1是纯文件流,但是我不知道我加的地方对不对
如果位置对的话,并没有感觉块多少呀,测试是文件流时间差在60~80不等,缓冲流在60~70不等。
四个.close()方法有必须要按照某种规则顺序去写吗,还是可以任意顺序任意位置,只要是在write和read方法或者含有他们的循环之后
正在回答
同学你好,
1、第一个问题,流关闭的顺序:建议在关闭流时,先打开的后关闭,后打开的先关闭。就比如我们进行开门时,从大门打开,然后打开卧室门,进入房间,出去时,在我们进行关门时,就要先关卧室门,再关大门。修改后的代码如下:
位置:调用close方法,要在使用完流后,进行关闭,也就是在循环后调用就可以。
2、对于下一个问题,你的理解是正确的
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星