老师,作业求批改点评,顺带一个小疑惑。
来源:3-16 自由编程
孬帮手慕小菜
2019-12-04 19:40:24
Test类:
import mode.ModeOne;
import mode.ModeTwo;
public class Test {
public static void main(String[] args) {
ModeOne m1 = new ModeOne();
ModeTwo m2 = new ModeTwo();
}
}ModeOne类:
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class ModeOne {
Long n = 0l,m = 0l;//设定计时变量n,m
/**
* 无参构造,对speech.txt文件进行写操作的主要方法
*/
public ModeOne() {
n = System.currentTimeMillis();//获取运行开始时间
try {
FileOutputStream fos = new FileOutputStream("F:\\IO\\test\\speech.txt");//设定文件绝对路径
for(int i=0;i<100000;i++) {//循环十万次写入数据
fos.write((char)i);//向文件中写入字符数据
}
m = System.currentTimeMillis();//获取运行后时间
System.out.println("写入完毕总用时:"+(m-n)+"毫秒");//计算出总运行时间
fos.close();//关闭流释放资源
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}
}
}ModeTwo类:
import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class ModeTwo {
Long n = 0l,m = 0l;//设定计时变量n,m
/**
* 无参构造,对speech2.txt文件进行写操作的主要方法
*/
public ModeTwo() {
n = System.currentTimeMillis();//获取运行之前的时间
try {
FileOutputStream fop = new FileOutputStream("F:\\IO\\test\\speech2");//设定文件绝对路径
BufferedOutputStream bfos = new BufferedOutputStream(fop);//使用缓冲流
for(int i = 0;i<100000;i++) {//循环十万次写入数据
bfos.write((char)i);//向文件中写入字符数据
}
m = System.currentTimeMillis();//获取运行之后的时间
System.out.println("写入完毕,总用时"+(m-n)+"毫秒");//计算出总运行时间
bfos.flush();//强制清空缓冲区
bfos.close();//关闭流,释放资源
fop.close();//关闭流释放资源
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}
}疑问:
如果我先关闭输入流再关闭缓冲流为什么会报错呢?


1回答
好帮手慕小尤
2019-12-05
同学你好,1. 建议同学按照作业要求计算出节省的时间。修改ModeOne与ModeTwo方法的类型将时间返回回去然后进行计算。修改后代码如下:



2. 流的关闭顺序是有要求的,如下所示的代码是有错误的:bfos是通过fos生成的,所以要先关闭bfos,然后再关闭fos。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
相似问题