zoukankan      html  css  js  c++  java
  • 采用Java语言如何实现高速文件复制?

            今天review代码也看到了“大神”用老方法来实现文件拷贝发怒。今天归结一下使用Java语言怎样实现高速文件复制:

            代码1——使用文件通道的方式:

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.nio.channels.FileChannel;
    
    public class Test {
    	public static void main(String[] args){
    		long start = System.currentTimeMillis();
    		FileInputStream fileInputStream = null;
            FileOutputStream fileOutputStream = null;
            FileChannel inFileChannel = null;
            FileChannel outFileChannel = null;
            try {
            	fileInputStream = new FileInputStream(new File("C:\from\不是闹着玩的.flv"));
            	fileOutputStream = new FileOutputStream(new File("C:\to\不是闹着玩的.flv"));
                inFileChannel = fileInputStream.getChannel();
                outFileChannel = fileOutputStream.getChannel();
                inFileChannel.transferTo(0, inFileChannel.size(), outFileChannel);//连接两个通道。从in通道读取数据写入out通道。

    } catch (IOException e) { e.printStackTrace(); } finally { try { if(fileInputStream != null){ fileInputStream.close(); } if(inFileChannel != null){ inFileChannel.close(); } if(fileOutputStream != null){ fileOutputStream.close(); } if(outFileChannel != null){ outFileChannel.close(); } } catch (IOException e) { e.printStackTrace(); } } long end = System.currentTimeMillis(); System.out.println("视频文件从“from”目录拷贝到“to”文件须要" + (end - start) + "毫秒。

    "); } }

            代码执行结果为:

            代码2——使用缓冲输入输出流

    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    public class Test {
    	public static void main(String[] args){
    		long start = System.currentTimeMillis();
    		InputStream fileInputStream = null;
            OutputStream fileOutputStream = null;
            try {
            	fileInputStream = new BufferedInputStream( new FileInputStream(new File("C:\from\不是闹着玩的.flv")));
            	fileOutputStream = new BufferedOutputStream(new FileOutputStream(new File("C:\to\不是闹着玩的.flv")));
            	byte[] bufferArray = new byte[1024*1024];   
                int length;   
                while ((length = fileInputStream.read(bufferArray)) != -1) {   
                    fileOutputStream.write(bufferArray, 0, length);   
                }  
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                	if(fileInputStream != null){
                		fileInputStream.close();
                	}
                    if(fileOutputStream != null){
    	                fileOutputStream.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    		long end = System.currentTimeMillis();
    		System.out.println("视频文件从“from”目录拷贝到“to”文件须要" + (end - start) + "毫秒。");
    	}
    }
            代码执行结果为:
      

            代码3——使用文件输入输出流的方式:

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class Test {
    	public static void main(String[] args){
    		long start = System.currentTimeMillis();
    		FileInputStream fileInputStream = null;
    		FileOutputStream fileOutputStream = null;
    		try{
    			fileInputStream = new FileInputStream(new File("C:\from\不是闹着玩的.flv")); //读入原文件 
    			fileOutputStream = new FileOutputStream("C:\to\不是闹着玩的.flv");
    	       	byte[] bufferArray = new byte[1024*1024]; 
    	       	int length; 
    	       	while ((length = fileInputStream.read(bufferArray)) != -1) { 
    	       		fileOutputStream.write(bufferArray, 0, length); 
    	       	}
    		} catch (IOException e) {
                e.printStackTrace();  
            } finally {
            	try {
            		if(fileInputStream != null){
            			fileInputStream.close();
            		}
            		if(fileOutputStream != null){
            			fileOutputStream.close();
            		}
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
            }
    		long end = System.currentTimeMillis();
    		System.out.println("视频文件从“from”目录拷贝到“to”文件须要" + (end - start) + "毫秒。");
    	}
    }
            代码执行结果为:

            代码1、代码2和代码3复制的是同样的文件,通过对比不难得出结论::尝试使用文件时,文件拷贝输入和输出流可能是一个更好的办法。

    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    新加坡
    android alt + /
    豌豆荚开源技术
    有意思的
    android view
    localstorage性能
    Android WebView使用基础
    关于hash
    Android 近百个项目的源代码,覆盖Android开发的每个领域
    10个经典的Android开源项目(附源码包)
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4820063.html
Copyright © 2011-2022 走看看