欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java文件快速copy復制實例代碼

 更新時間:2021年01月04日 15:20:26   作者:Java勸退師、  
這篇文章主要給大家介紹了關(guān)于Java文件快速copy復制的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

最近學習netty的時候發(fā)現(xiàn)nio包下有個FileChannel類,經(jīng)過了解這個類作用是個專門負責傳輸文件的通道,支持多線程,而且經(jīng)過反復多次測試FileChannel復制文件的速度比BufferedInputStream/BufferedOutputStream復制文件的速度快了近三分之一。在復制大文件的時候更加體現(xiàn)出FileChannel的速度優(yōu)勢。而且FileChannel是多并發(fā)線程安全的。代碼也比較簡潔

代碼貼下

package com.niu.nio;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.channels.FileChannel;
 
/**
 * @description:
 * @author: nxq email: niuxiangqian163@163.com
 * @createDate: 2020/12/28 5:48 下午
 * @updateUser: nxq email: niuxiangqian163@163.com
 * @updateDate: 2020/12/28 5:48 下午
 * @updateRemark:
 * @version: 1.0
 **/
public class Main {
 public static void main(String[] args) {
 quickCopy(new File("/Users/laoniu/a.txt"),new File("/Users/laoniu/b.txt"));
 }
 /**
  * 快速copy
  * @author nxq
  * @param src: 源文件
  * @param target: 目標文件
  * @return void
  */
 public static void quickCopy(File src, File target){
  try(FileInputStream inputStream = new FileInputStream(src);
   FileOutputStream outputStream = new FileOutputStream(target);
   FileChannel inputChannel = inputStream.getChannel(); // 得到源文件通道
   FileChannel outputChannel = outputStream.getChannel()// 得到目標文件通道
  ) {
   //將源文件數(shù)據(jù)通達連通到目標文件通道進行傳輸
   inputChannel.transferTo(0,inputChannel.size(),outputChannel);
  }catch (Exception e){
   e.printStackTrace();
  }
 }
}

關(guān)于這種io流關(guān)閉方式不清楚的同學請看我這篇文章:http://www.dbjr.com.cn/article/203438.htm

測試對比

復制目標文件:

4.76GB

代碼

package com.niu.nio;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.channels.FileChannel;
 
/**
 * @description:
 * @author: nxq email: niuxiangqian163@163.com
 * @createDate: 2020/12/28 5:48 下午
 * @updateUser: nxq email: niuxiangqian163@163.com
 * @updateDate: 2020/12/28 5:48 下午
 * @updateRemark:
 * @version: 1.0
 **/
public class Main {
 public static void main(String[] args) {
  long start = System.currentTimeMillis();
  File src = new File("/Users/laoniu/Downloads/installer/cn_windows_10_business_edition_version_1809_updated_sept_2018_x64_dvd_fc5542c0.iso"); //文件4.76GB
  quickCopy(src,new File("/Users/laoniu/test/a.iso"));
   long end = System.currentTimeMillis();
  System.out.println("FileChannel復制:"+(end - start));
 
   start = System.currentTimeMillis();
  copy(src,new File("/Users/laoniu/test/b.iso"));
   end = System.currentTimeMillis();
  System.out.println("普通復制:"+(end - start));
 
 
 }
 /**
  * 快速copy
  * @author nxq
  * @param src: 源文件
  * @param target: 目標文件
  * @return void
  */
 public static void quickCopy(File src, File target){
  try(FileInputStream inputStream = new FileInputStream(src);
   FileOutputStream outputStream = new FileOutputStream(target);
   FileChannel inputChannel = inputStream.getChannel(); // 得到源文件文件通道
   FileChannel outputChannel = outputStream.getChannel()// 得到目標文件通道
  ) {
   //將源文件數(shù)據(jù)通達連通到目標文件通道進行傳輸
   inputChannel.transferTo(0,inputChannel.size(),outputChannel);
  }catch (Exception e){
   e.printStackTrace();
  }
 }
 /**
  * 普通copy
  * @author nxq
  * @param src:
  * @param target:
  * @return void
  */
 public static void copy(File src, File target){
  try(FileInputStream inputStream = new FileInputStream(src);
   FileOutputStream outputStream = new FileOutputStream(target);
  ) {
   byte[] data = new byte[1024*1024]; //加大每次讀取的數(shù)據(jù)多少
   int len;
   while ((len = inputStream.read(data))!=-1){
    outputStream.write(data,0,len);
   }
 
  }catch (Exception e){
   e.printStackTrace();
  }
 }
 
}

加大每次讀取的數(shù)據(jù)到1024*1024,否則更慢

結(jié)果

總結(jié)

到此這篇關(guān)于Java文件快速copy復制的文章就介紹到這了,更多相關(guān)Java文件快速copy復制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決java.lang.IllegalArgumentException異常問題

    解決java.lang.IllegalArgumentException異常問題

    這篇文章主要介紹了解決java.lang.IllegalArgumentException異常問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • spring中@ComponentScan自動掃描并指定掃描規(guī)則

    spring中@ComponentScan自動掃描并指定掃描規(guī)則

    本文主要介紹了spring中@ComponentScan自動掃描并指定掃描規(guī)則,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • Maven中的庫repository詳解

    Maven中的庫repository詳解

    Maven中要配置庫,可以有多種方式,最直接的是在項目中的pom.xml文件中,通過<repositories>配置庫,這樣配置的庫僅適用于當前項目,這篇文章主要介紹了Maven中的庫(repository),需要的朋友可以參考下
    2024-01-01
  • 一文帶你全面了解Java?Properties類

    一文帶你全面了解Java?Properties類

    Properties是JDK1.0中引入的java類,目前也在項目中大量使用,主要用來讀取外部的配置,那除了這個,你對它其他的一些api也了解嗎??你了解它是怎么實現(xiàn)的嗎??如果不清楚的話,就通過本篇文章帶你一探究竟
    2022-09-09
  • 詳解Java引用類型的參數(shù)也是值傳遞

    詳解Java引用類型的參數(shù)也是值傳遞

    這篇文章主要介紹了Java引用類型的參數(shù)也是值傳遞,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • MyBatis-Plus 自動填充的實現(xiàn)示例

    MyBatis-Plus 自動填充的實現(xiàn)示例

    MyBatis-Plus 提供了自動填充功能,幫助開發(fā)者在插入或更新數(shù)據(jù)時,自動為某些字段賦值,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-09-09
  • SpringMVC視圖轉(zhuǎn)發(fā)重定向區(qū)別及控制器詳解

    SpringMVC視圖轉(zhuǎn)發(fā)重定向區(qū)別及控制器詳解

    這篇文章主要為大家介紹了SpringMVC視圖轉(zhuǎn)發(fā)重定向區(qū)別及控制器示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • JAVA實現(xiàn)數(shù)字大寫金額轉(zhuǎn)換的方法

    JAVA實現(xiàn)數(shù)字大寫金額轉(zhuǎn)換的方法

    這篇文章主要介紹了JAVA實現(xiàn)數(shù)字大寫金額轉(zhuǎn)換的方法,涉及java針對字符串與數(shù)組的遍歷與轉(zhuǎn)換相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • Springboot中Instant時間傳參及序列化詳解

    Springboot中Instant時間傳參及序列化詳解

    這篇文章主要介紹了Springboot中Instant時間傳參及序列化詳解,Instant是Java8引入的一個精度極高的時間類型,可以精確到納秒,但實際使用的時候不需要這么高的精確度,通常到毫秒就可以了,需要的朋友可以參考下
    2023-11-11
  • Spring boot測試找不到SpringRunner.class的問題

    Spring boot測試找不到SpringRunner.class的問題

    這篇文章主要介紹了Spring boot測試找不到SpringRunner.class的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01

最新評論