一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

4種復(fù)制文件的方式性能比較

 ctbtcol 2015-01-20

4種復(fù)制文件的方式性能比較


最近工作中涉及到了文件的下載,于是就想尋找一種最快的方式,考慮到在不考慮網(wǎng)絡(luò)因素的情況下,下載和文件的復(fù)制其實(shí)可以理解為
一回事,本次測試中使用了4種方式


硬件如下


jdk 7



代碼如下:


public class FileDownloader {

    public static void copyFileUsingStream(File source, File dest) throws IOException {
        InputStream is = null;
        OutputStream os = null;
        try {
            is = new FileInputStream(source);
            os = new FileOutputStream(dest);
            byte[] buffer = new byte[1024];
            int length;
            while ((length = is.read(buffer)) > 0) {
                os.write(buffer, 0, length);
            }
        } finally {
            IOUtils.closeQuietly(is);
            IOUtils.closeQuietly(os);
        }
    }

    public static void copyFileUsingApacheCommonsIO(File source, File dest) throws IOException {
        FileUtils.copyFile(source, dest);
    }

    public static void copyFileUsingJava7Files(File source, File dest) throws IOException {
        Files.copy(source.toPath(), dest.toPath());
    }

    public static void copyFileUsingChannel(File source, File dest) throws IOException {
        FileChannel sourceChannel = null;
        FileChannel destChannel = null;
        try {
            sourceChannel = new FileInputStream(source).getChannel();
            destChannel = new FileOutputStream(dest).getChannel();
            destChannel.transferFrom(sourceChannel, 0, Long.MAX_VALUE);
        } finally {
            IOUtils.closeQuietly(sourceChannel);
            IOUtils.closeQuietly(destChannel);
        }
    }

}

測試代碼如下:


public class FileDownloaderTest {

    private File source;

    private File dest;

    @Test
    public void testCopyFileUsingStream() throws Exception {
        source = new File("e://1.avi");
        dest = new File("d://1.avi");

        long start = System.nanoTime();
        FileDownloader.copyFileUsingStream(source, dest);
        System.out.println("Time taken by Stream Copy = " + (System.nanoTime() - start));
    }

    @Test
    public void testCopyFileUsingApacheCommonsIO() throws Exception {
        source = new File("e://2.avi");
        dest = new File("d://2.avi");
        long start = System.nanoTime();
        FileDownloader.copyFileUsingApacheCommonsIO(source, dest);
        System.out.println("Time taken by Apache Commons IO Copy = " + (System.nanoTime() - start));
    }

    @Test
    public void testCopyFileUsingJava7Files() throws Exception {
        source = new File("e://3.avi");
        dest = new File("d://3.avi");
        long start = System.nanoTime();
        FileDownloader.copyFileUsingJava7Files(source, dest);
        System.out.println("Time taken by Java7 Files Copy = " + (System.nanoTime() - start));
    }

    @Test
    public void testCopyFileUsingChannel() throws Exception {
        source = new File("e://4.avi");
        dest = new File("d://4.avi");
        long start = System.nanoTime();
        FileDownloader.copyFileUsingChannel(source, dest);
        System.out.println("Time taken by Channel Copy = " + (System.nanoTime() - start));
    }
}

測試方法:


將同樣的文件,在原始目錄下,復(fù)制4份,文件名不同,文件一摸一樣。然后多次執(zhí)行測試代碼。


做了2組測試,每組執(zhí)行了3次,結(jié)果如下:


文件大?。?span>98.3M

Time taken by Apache Commons IO Copy = 64954135
Time taken by Stream Copy = 375539829
Time taken by Channel Copy = 57012898
Time taken by Java7 Files Copy = 65101591

Time taken by Apache Commons IO Copy = 63818085
Time taken by Stream Copy = 375973711
Time taken by Channel Copy = 57417522
Time taken by Java7 Files Copy = 65688487

Time taken by Apache Commons IO Copy = 63172674
Time taken by Stream Copy = 354136258
Time taken by Channel Copy = 58497984
Time taken by Java7 Files Copy = 79916185

文件大?。?span>746M


Time taken by Apache Commons IO Copy = 660830180
Time taken by Stream Copy = 2791359285
Time taken by Channel Copy = 3861113037
Time taken by Java7 Files Copy = 6162249000

Time taken by Apache Commons IO Copy = 381343255
Time taken by Channel Copy = 2987676936
Time taken by Stream Copy = 2856878081
Time taken by Java7 Files Copy = 19034765260

Time taken by Apache Commons IO Copy = 419664709
Time taken by Stream Copy = 2761465029
Time taken by Channel Copy = 4183763748
Time taken by Java7 Files Copy = 23261100925

結(jié)論 nio 方式比較快

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    亚洲午夜av久久久精品| 亚洲精品一二三区不卡| 亚洲国产精品无遮挡羞羞| 亚洲综合一区二区三区在线| 国产午夜精品福利免费不| 国产成人亚洲欧美二区综| 国产精品一区二区日韩新区| 亚洲精品欧美精品一区三区| 亚洲欧美日韩在线中文字幕| 日韩偷拍精品一区二区三区| 欧美极品欧美精品欧美| 久久综合九色综合欧美| 久久精品国产在热久久| 99亚洲综合精品成人网色播| 国产成人一区二区三区久久| 中日韩免费一区二区三区| 91欧美视频在线观看免费| 国产精品一区二区视频成人| 国产精品一区二区三区日韩av | 欧美亚洲三级视频在线观看| 欧美日韩中国性生活视频| 国产精品欧美激情在线观看| 国产午夜精品美女露脸视频| 亚洲中文字幕视频一区二区| 五月婷婷六月丁香亚洲| 中文字字幕在线中文乱码二区| 欧美一区二区三区高潮菊竹| 精品少妇一区二区视频| 中文字幕有码视频熟女| 欧美精品亚洲精品一区| 91久久精品中文内射| 国产精品熟女乱色一区二区| 日本女优一色一伦一区二区三区| 欧美视频在线观看一区| 成人精品亚洲欧美日韩| 在线观看视频日韩成人| 人妻露脸一区二区三区| 亚洲最新中文字幕一区| 国产又大又黄又粗又免费| 精品视频一区二区不卡| 国产精品成人一区二区三区夜夜夜 |