为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我的流复制过程性能不断下降

为什么我的流复制过程性能不断下降

慕仙森 2022-08-17 16:36:55
此代码在复制大文件期间工作速度越来越慢。我做错了什么吗?    InputStream ms2 = new BufferedInputStream(new FileInputStream("/home/fedd/Videos/homevid.mp4"));    OutputStream fos2 = new BufferedOutputStream(new FileOutputStream("testfile2.mp4", true));    try {        int byt;        int i = 0;        long time = System.currentTimeMillis();        while ((byt = ms2.read()) != -1) {            fos2.write(byt);            i++;            if (i > 100000) {                i = 0;                long took = System.currentTimeMillis() - time;                System.out.println("100000 bytes took " + took + " milliseconds which means " + (100000000 / took) + " bytes per second");            }        }        fos2.close();        ms2.close();    } catch (Exception e) {        throw new RuntimeException(e);    }我的Java是:openjdk 10.0.2 2018-07-17 OpenJDK 运行时环境 (build 10.0.2+13-Ubuntu-1ubuntu0.18.04.4)OpenJDK 64 位服务器 VM (build 10.0.2+13-Ubuntu-1ubuntu0.18.04.4, 混合模式)
查看完整描述

2 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

您需要在每次比较后重置基本“时间”。尝试使用以下命令:


if (i > 100000) {

    i = 0;

    long took = System.currentTimeMillis() - time;

    time = System.currentTimeMillis();

    System.out.println("100000 bytes took " + took + " milliseconds which means " + (100000000 / took) + " bytes per second");

}


查看完整回答
反对 回复 2022-08-17
?
POPMUISE

TA贡献1765条经验 获得超5个赞

性能会下降,因为计算错误。对于第二个区块,您正在根据第二个区块大小计算每秒字节数,但从两个区块时间计算。尝试在以下时间后添加time = System.currentTimeMillis();long took = ...



查看完整回答
反对 回复 2022-08-17
  • 2 回答
  • 0 关注
  • 75 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信