java的一些开源!

来源:互联网 发布:三星s5选定网络不可用 编辑:程序博客网 时间:2024/06/02 03:16

  } catch (FileNotFoundException e) {

  e.printStackTrace();

  } catch (IOException e) {

  e.printStackTrace();

  } finally {

  try {

  bufferedInput.close();

  bufferedOutput.close();

  } catch (IOException e) {

  e.printStackTrace();

  }

  }

  }

  }

  class FileOperatorTest{

  public static void main(String args[]){

  File src = new File("test.txt");

  File dest = new File("copyTest.txt");

  try {

  if (!dest.exists()){

  dest.createNewFile();

  }

  } catch (IOException e) {

  e.printStackTrace();

  }

  //test copy using FileStream

  int startTime = System.currentTimeMillis();

  FileOperator.copyWithFileStream(src, dest);

  int endTime = System.currentTimeMillis();

  System.out.println("Copy file using FileStream takes : " + (endTime - startTime) + " ms.");

  //test copy using BufferedStream

  startTime = System.currentTimeMillis();

  FileOperator.copyWithBufferedStream(src, dest);

  endTime = System.currentTimeMillis();

  System.out.println("Copy file using BufferedStream takes : " + (endTime - startTime) + " ms.");

  }

  }

  【运行结果】

  测试文件大小约为900M,以下是在设定BUFFER_SIZE为不同值时的一次执行结果:

  BUFFER_SIZE = 100

  Copy file using FileStream takes: 42680 ms.

  Copy file using BufferedStream takes: 2407 ms.

  BUFFER_SIZE = 8192

  Copy file using FileStream takes: 1689 ms.

  Copy file using BufferedStream takes: 1654 ms.

  BUFFER_SIZE = 1000000

  Copy file using FileStream takes: 957 ms.

  Copy file using BufferedStream takes: 929 ms.

  【对时间效率差异的解释】

  BufferedInputStream比FileInputStream多了一个缓冲区,执行read时先从缓冲区读取,当缓冲区数据读完时再把缓冲区填满。

  因此,当每次读取的数据量很小时,FileInputStream每次都是从硬盘读入,而BufferedInputStream大部分是从缓冲区读入。读取内存速度比读取硬盘速度快得多,因此BufferedInputStream效率高。

  BufferedInputStream的默认缓冲区大小是8192字节。当每次读取数据量接近或远超这个值时,两者效率就没有明显差别了。

  BufferedOutputStream和FileOutputStream同理,差异更明显一些。

  【结论】

  一般情况下,我们应该优先选取BufferedInputStream&BufferedOutputStream。

0 0
原创粉丝点击