Java位元組流檔案複製及效率比較

sust_ly發表於2018-08-03

    前兩種是不帶緩衝的的位元組流複製,後兩種是帶緩衝的位元組流複製,可以看出帶緩衝的位元組流複製的效率遠遠大於不帶緩衝的位元組流複製,而帶位元組陣列複製的效率也要比單個位元組複製的效率高。

public static void main(String[] args) throws IOException {
        long s = System.currentTimeMillis();
        copy_4();
        long e = System.currentTimeMillis();
        System.out.println(e-s);
    }
    /**
     * @author admin
     * @throws IOException
     * @Data 2018-8-3 
     * @see 位元組流複製檔案  47776ms
     */
    public static void copy_1() throws IOException {
        FileOutputStream fos = new FileOutputStream(new File("E:\\demo.java"));
        FileInputStream fis = new FileInputStream(new File("D:\\demo.java"));
        int n = 0;
        while ((n = fis.read()) != -1) {
            fos.write(n);            
        }
        fis.close();
        fos.close();
    }
    /**
     * @author admin
     * @throws IOException
     * @see 位元組流位元組陣列複製  83ms
     */
    public static void copy_2() throws IOException {
        FileOutputStream fos = new FileOutputStream(new File("E:\\demo.java"));
        FileInputStream fis = new FileInputStream(new File("D:\\demo.java"));
        byte[] bytes = new byte[1024];
        int n =0;
        while ((n = fis.read(bytes)) != -1) {
            fos.write(bytes, 0, n);            
        }
        fis.close();
        fos.close();
    }
    /**
     * @author admin
     * @throws IOException
     * @see 位元組流帶緩衝複製  272ms
     */
    public static void copy_3()throws IOException{
        BufferedOutputStream bos = new BufferedOutputStream(
                new FileOutputStream(new File("E:\\demo.java")));
        BufferedInputStream bis = new BufferedInputStream(
                new FileInputStream(new File("D:\\demo.java")));
        int n = 0;
        while((n = bis.read()) != -1){
            bos.write(n);
        }
        bos.close();
        bis.close();
    }
    /**
     * @author admin
     * @throws IOException
     * @see 位元組流帶緩衝位元組陣列複製  19ms
     */
    public static void copy_4()throws IOException{
        BufferedOutputStream bos = new BufferedOutputStream(
                new FileOutputStream(new File("E:\\demo.java")));
        BufferedInputStream bis = new BufferedInputStream(
                new FileInputStream(new File("D:\\demo.java")));
        byte[] bytes = new byte[1024];
        int n = 0;
        while((n = bis.read(bytes)) != -1){
            bos.write(bytes,0,n);
        }
        bos.close();
        bis.close();
    }

相關文章