20220518_原始字节流与缓冲字节流,单字节,字节数组,四种组合复制1G大文件耗时案例

该博客通过对比不同方式复制1G大文件的耗时,展示了使用原始字节流、原始字节流按数组、缓冲字节流按字节以及缓冲字节流按数组的效率。结果显示,使用缓冲字节流按数组复制文件速度最快,且数组大小为8192字节时,仅需2.4秒。
public class ByteBufferTimeUsageDemo2 {
    private static final String SRC_FILE = "D:\\TXYdownload\\install app\\ensp\\eNSP&CRT\\CE.img";
    private static final String DEST_FILE = "D:\\TXYdownload\\install app\\ensp";
    public static void main(String[] args) {
//        copy1();/**使用原始字节流,一个字节一个字节地复制1G的大文件, 耗时长到不能等*/
//        copy2();/**使用原始字节流按一个一个字节数组,复制1G的大文件,桶1024k用了9秒,8192用了2.4秒*/
//        copy3();/**使用缓冲字节流按一个一个字节,复制1G的大文件,用了40秒*/
        copy4();/**使用缓冲字节流按一个一个字节数组,复制1G的大文件,桶1024用时2.6秒,8192用了2.4秒*/

    }

    private static void copy4() {
        long startTime = System.currentTimeMillis();
        try (InputStream in = new FileInputStream(SRC_FILE);
             InputStream bin = new BufferedInputStream(in);
             OutputStream ou = new FileOutputStream(DEST_FILE+"new_CE.img");
             OutputStream bou = new BufferedOutputStream(ou);
             /**资源放在这,你不用操心最后刷新或者释放的事了*/
        ) {
            int num;/**返回的是每次读取到的字节数目*/
            byte[] bys = new byte[8192];/**每次读取到的字节会存入这个数组, 1024用时2.6秒,8192用了2.4秒*/
            while ((num = bin.read(bys)) != -1){
                bou.write(bys);
            }
            System.out.println("Copy is finished.");
        } catch (Exception e) {
            e.printStackTrace();
        }
        long endTime = System.currentTimeMillis();
        System.out.println("Buffered byte stream arr by arr time usage: "+(endTime-startTime)/1000.0+"s");
    }

    private static void copy3() {
        long startTime = System.currentTimeMillis();
        try (InputStream in = new FileInputStream(SRC_FILE);
             InputStream bin = new BufferedInputStream(in);
             OutputStream ou = new FileOutputStream(DEST_FILE+"new_CE.img");
             OutputStream bou = new BufferedOutputStream(ou);
             /**资源放在这,你不用操心最后刷新或者释放的事了*/
        ) {
            int num;/**读到的单字节,读完之后下一次返回-1,代表空*/

            while ((num = bin.read()) != -1){
                bou.write(num);/**你用缓冲,这里还是一个字节一个字节地注入,依然慢,只是能完成任务*/
            }
            System.out.println("Copy is finished.");
        } catch (Exception e) {
            e.printStackTrace();
        }
        long endTime = System.currentTimeMillis();
        System.out.println("Buffered byte stream one by one time usage: "+(endTime-startTime)/1000.0+"s");
    }

    private static void copy2() {
        long startTime = System.currentTimeMillis();
        try (InputStream in = new FileInputStream(SRC_FILE);
             OutputStream ou = new FileOutputStream(DEST_FILE+"new_CE.img");
             /**资源放在这,你不用操心最后刷新或者释放的事了*/
        ) {
            int num;/**返回的是每次读取到的字节数目*/
            byte[] bys = new byte[8192];/**每次读取到的字节会存入这个数组, 1024k用了9秒,8192用了2.4秒*/
            while ((num = in.read(bys)) != -1){
                ou.write(bys);
            }
            System.out.println("Copy is finished.");
        } catch (Exception e) {
            e.printStackTrace();
        }
        long endTime = System.currentTimeMillis();
        System.out.println("Original byte stream arr by arr time usage: "+(endTime-startTime)/1000.0+"s");
    }

    private static void copy1() {
        long startTime = System.currentTimeMillis();
        try (InputStream in = new FileInputStream(SRC_FILE);
             OutputStream ou = new FileOutputStream(DEST_FILE+"new_CE.img");
             /**资源放在这,你不用操心最后刷新或者释放的事了*/
        ) {
            int num;/**返回的是byte,但你完全可以用int来接*/
            while ((num = in.read()) != -1){
                ou.write(num);
            }
            System.out.println("Copy is finished.");
        } catch (Exception e) {
            e.printStackTrace();
        }
        long endTime = System.currentTimeMillis();
        System.out.println("Original byte stream one by one time usage: "+(endTime-startTime)/1000.0+"s");
    }


}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值