关于多次执行结果不一致的问题

来源:3-16 自由编程

Homo_sapiensQ

2020-08-21 11:18:34

package com.imooc.file;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.StringBufferInputStream;

public class BufferTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		File f1 = new File("d://学习//eclipse//workplace//Java BackEnd//src//com//imooc//file//one.txt");
		File f2 = new File("d://学习//eclipse//workplace//Java BackEnd//src//com//imooc//file//two.txt");

		try {

			if (!f1.exists()) {
				f1.createNewFile();
			}
			if (!f2.exists()) {
				f2.createNewFile();
			}

			FileInputStream fis1 = new FileInputStream(
					"d://学习//eclipse//workplace//Java BackEnd//src//com//imooc//file//one.txt");
			FileOutputStream fos1 = new FileOutputStream(
					"d://学习//eclipse//workplace//Java BackEnd//src//com//imooc//file//one.txt");

			long startTime = System.currentTimeMillis();
			for (int i = 0; i < 100000; i++) {
				fos1.write('a');
			}

			long endTime = System.currentTimeMillis();

			fis1.close();
			fos1.close();

			System.out.println("two.txt使用缓冲区来写:" + (endTime - startTime));

			long startTime2 = System.currentTimeMillis();

			FileInputStream fis2 = new FileInputStream(
					"d://学习//eclipse//workplace//Java BackEnd//src//com//imooc//file//one.txt");
			FileOutputStream fos2 = new FileOutputStream(
					"d://学习//eclipse//workplace//Java BackEnd//src//com//imooc//file//one.txt");

			BufferedOutputStream bos = new BufferedOutputStream(fos2);
			BufferedInputStream bis = new BufferedInputStream(fis2);
			for (int i = 0; i < 100000; i++) {
				bos.write('a');
			}
			bos.flush();
			long endTime2 = System.currentTimeMillis();

			System.out.println("two.txt使用缓冲区来写:" + (endTime2 - startTime2));
			fis2.close();
			fos2.close();
			bos.close();
			bis.close();

		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

上面这段代码,有两个问题:

  1. 请问有什么可以改进优化的地方吗?

  2. 为何多次执行,结果会不一样?

写回答

1回答

好帮手慕阿园

2020-08-21

同学你好,代码完成的不错,很棒

1,同学代码中有如下地方需要优化一下

①有个输出语句需要改一下,如下

http://img.mukewang.com/climg/5f3f67ae09867e3d07140128.jpg

这里应该是"one.txt不使用缓冲流来写"

②建议同学将关闭流的操作放入finally语句中,这样出现异常也会执行关闭流的操作,防止浪费资源

2,每次运行用时的时间不一样的正常的,因为每次电脑的内存CPU运行所读取的时间都是不同的

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


0

0 学习 · 16556 问题

查看课程