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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© schwiftX 中级黑马   /  2015-3-17 23:52  /  796 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

自己按照毕老师的视频编写了个复制文件的小程序,已经用上BufferedInputStream, BufferedOutputStream缓冲区数组等技术,可是拷贝速度依然很慢,大概700多KB/S吧,与Windows自身100+MB/S的拷贝速度根本无法比啊,想知道怎么会差那么多,照理说IO流不是调用的Windows底层资源吗?
不应该吧。。。。
下面是源码
  1. import java.io.*;
  2. class CopyMp3
  3. {
  4.         public static void main(String[] args) throws IOException
  5.         {
  6.                 long start = System.currentTimeMillis();
  7.                 copy_1();
  8.                 long end = System.currentTimeMillis();
  9.                 System.out.print((end-start)+"毫秒");
  10.         }
  11. //        通过字节流的缓冲区完成复制。速度快些。但还是很慢。。。
  12.         public static void copy_1() throws IOException
  13.         {               
  14.                 MyBufferedInputStream bis = new MyBufferedInputStream(new FileInputStream("d:\\360桌面截图20141128211954.jpg"));
  15.                 BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("d:\\aadvanced.jpg"));
  16.                 int by = 0;
  17.                 while ((by=bis.read())!=-1)
  18.                 {
  19.                         bos.write(by);
  20.                 }               
  21.                 /*有溢出风险的一种方式
  22.                 byte [] buffer = new byte[fis.available()];
  23.                 fis.read(buffer);
  24.                 fos.write(buffer);*/

  25.                 bis.close();
  26.                 bos.close();
  27.         }
  28.         /*如果不用字节流的缓冲区的话会很慢
  29.         public static void copy_1() throws IOException
  30.         {               
  31.                 FileInputStream bis = new FileInputStream("d:\\360桌面截图20141128211954.jpg");
  32.                 FileOutputStream bos = new FileOutputStream("d:Java.jpg");
  33.                 int by = 0;
  34.                 while ((by=bis.read())!=-1)
  35.                 {
  36.                         bos.write(by);
  37.                 }
  38.                 bis.close();
  39.                 bos.close();
  40.         }*/
  41. }
复制代码



3 个回复

正序浏览
没劲睡觉 发表于 2015-3-18 09:51
那就先用数组存储  看看

用过,几乎都一样的速度,所以测试过后删掉了那段代码。
测试了好几种,只有加Buffered和不加有区别,其他不管我代码怎么改都差不多。
回复 使用道具 举报
那就先用数组存储  看看
回复 使用道具 举报
可能是实现的方法不一样吧,就比如说排序,我们学的有冒泡排序和选择排序,但是效率都不高,java有封装的希尔排序等,效率比较高,他们的算法应该是不一样的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马