A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本人针对400MB得视频测试复制速度,结果发现RandomAccessFile复制文件相比BufferedOutputStream花了少一半得时间
有图有真相:



下面是实现代码:

  1. package com.wangzhe;

  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.FileInputStream;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.io.RandomAccessFile;


  8. public class Test {
  9.         public static void main(String[] args) throws IOException {
  10.                
  11.                 long start,stop;
  12.                 start =System.currentTimeMillis();
  13.                 test1();
  14.                 stop =System.currentTimeMillis();
  15.                 System.out.println((stop-start)+"毫秒");//4854毫秒
  16.                
  17.                 start =System.currentTimeMillis();
  18.                 test2();
  19.                 stop =System.currentTimeMillis();
  20.                 System.out.println((stop-start)+"毫秒");//7169毫秒
  21.         }

  22.         public static void test2() throws IOException {
  23.                 BufferedInputStream bis=new BufferedInputStream(new FileInputStream("D:\\1.avi"));
  24.                 BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("F:\\3.avi"));
  25.                 byte[] bytes=new byte[8192];
  26.                 int len=0;
  27.                 while((len=bis.read(bytes))!=-1){
  28.                         bos.write(bytes);
  29.                         bos.flush();
  30.                 }
  31.                 bis.close();
  32.                 bos.close();       
  33.                
  34.         }

  35.         public static void test1() throws IOException {
  36.                
  37.                 RandomAccessFile readFile=new RandomAccessFile("D:\\1.avi","r");
  38.                 RandomAccessFile writeFile=new RandomAccessFile("E:\\2.avi","rw");
  39.                 byte[] bytes=new byte[8192];
  40.                 int len=0;
  41.                 while((len=readFile.read(bytes))!=-1){
  42.                         writeFile.write(bytes);
  43.                 }
  44.                 readFile.close();
  45.                 writeFile.close();               
  46.                
  47.         }
  48. }

复制代码

1 个回复

倒序浏览
看帖有福利,,2楼教你最快的文件复制方式,就是用NIO的通道
如下代码对于400MB的视频文件仅300毫秒复制完毕,,,好快的说

  1. try(FileInputStream fi = new FileInputStream("D:\\1.avi");
  2.                 FileOutputStream fo = new FileOutputStream("F:\\2.avi");
  3.                 FileChannel in = fi.getChannel();//得到对应的文件通道
  4.                 FileChannel out = fo.getChannel();) {//得到对应的文件通道
  5.                         in.transferTo(0, in.size(), out);//连接两个通道,并且从in通道读取,然后写入out通道
  6.                 } catch (IOException e) {
  7.                         e.printStackTrace();
  8.                 }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马