运行实在不知道哪里错了,two.txt的用时始终为0

运行实在不知道哪里错了,two.txt的用时始终为0

import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class lianxi1 {
    
    public static void main(String[] args){
        try {
            byte[] b = new byte[150000];
            FileOutputStream one = new FileOutputStream("one.txt");
            System.out.println("one.txt不使用缓冲流来写");
            long oneStartTime = System.currentTimeMillis();
            for(int i = 0;i < b.length;i++){
                one.write(b[i]);
            }
            long oneEndTime = System.currentTimeMillis();
            System.out.println("用时为:" + (oneEndTime - oneStartTime));
            System.out.println("two.txt使用缓冲流来写");
            one.close();
            
            FileOutputStream two = new FileOutputStream("two.txt");
            BufferedOutputStream bos = new BufferedOutputStream(two);
            long twoStartTime = System.currentTimeMillis();
            for(int i = 0;i < b.length;i++){
                bos.write(b[i]);
            }
            bos.flush();
            long twoEndTime = System.currentTimeMillis();
            System.out.println("用时为:" + (twoEndTime - twoStartTime));
            two.close();
            bos.close();
            System.out.println("节省时间:" + ((oneEndTime - oneStartTime)-(twoEndTime - twoStartTime)));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,代码没有错哦~

我这里运行同学的代码使用缓冲流写入时,时间不为0呢~

http://img1.sycdn.imooc.com//climg/5d26ff1600012cb202300133.jpg

同学的用时为0,可能是因为同学电脑的执行速度太快了,在long类型表示的时间差距下统计不出来时间差呢~

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

  • 人家说的是文件里的数据吧,你这貌似是答非所问
    2019-07-11 17:30:28
  • 同学你好,数组没有赋值时,默认值为0,也是可以写入到文件中的哦~ 文件中没有显示的原因可能是因为数组长度过大,无法显示其中的内容。 同学可以将数组b的初始化长度改为1500,再查看就有值了呢~
    2019-07-11 18:02:27
慕数据5106356 2019-07-11 17:39:23

问题出在这里 

for(int i = 0;i < b.length;i++){
                one.write(b[i]);
            }

你的数组并没有赋值,当循环第一次时 i的值是数组下标为0的数值,当循环第二次时 i的值是数组下标为1的数值.  而这两个下标上边的值均为空,你再通过b[i]赋值 并write时,写进去的内容当然为空了。不信可以自己debug看一看

  • 提问者 慕UI2011250 #1
    import java.io.BufferedOutputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class lianxi1 { public static void main(String[] args) { try { byte[] b = new byte[100000]; // one.txt System.out.println("one.txt不使用缓冲流来写"); FileOutputStream fos1 = new FileOutputStream("one.txt"); long startTime1 = System.currentTimeMillis(); for (int i = 0; i < b.length; i++) { fos1.write(b[i]); } long endTime1 = System.currentTimeMillis(); System.err.println("用时为:" + (endTime1 - startTime1)); fos1.close(); // two.txt System.out.println("two.txt使用缓冲流来写"); FileOutputStream fos2 = new FileOutputStream("two.txt"); BufferedOutputStream bos = new BufferedOutputStream(fos2); long startTime2 = System.currentTimeMillis(); for (int i = 0; i < b.length; i++) { bos.write(b[i]); } bos.flush(); long endTime2 = System.currentTimeMillis(); System.err.println("用时为:" + (endTime2 - startTime2)); bos.close(); fos2.close(); System.err.println("节省时间:" + ((endTime1 - startTime1) - (endTime2 - startTime2))); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } 这个也没有赋值但是运行时对的
    2019-07-12 14:16:30
  • 吃吃吃鱼的猫 回复 提问者 慕UI2011250 #2
    所以同学现在解决问题了吗~
    2019-07-12 19:41:08
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师