关于如何提升文件的传输效率小结

下面的代码能够实现以字节为单位复制文件的功能,适合复制非文本类型的文件。
import java.io.FileInputStream;java

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;数组

/**缓存

  • 实现文件复制
  • @author Administrator
  • */
    public class CopyFile {
    public static void copyBytesFile(String sFileName, String dFileName)
    throws IOException {
    // 建立文件输入流对象和文件输出流对象
    // 文件输入流对象与源文件关联
    FileInputStream fis = new FileInputStream(sFileName);
    // 文件输出流对象与目标文件关联
    FileOutputStream fos = new FileOutputStream(dFileName);
    // 循环读取文件内容,同时写出到外部文件
    int read = fis.read();// 从关联的源文件中读一个字节,若是到达文件末,返回值为-1
    while (read != -1) {
    fos.write(read);// 向关联的目标文件写出一个字节
    read = fis.read();
    }
    // 清空缓存,关闭流对象
    fis.close();
    fos.close();
    }
    /**
    • @param args
      */
      public static void main(String[] args) {
      // TODO Auto-generated method stub
      long t1, t2;
      t1 = System.currentTimeMillis();
      try {
      CopyFile.copyBytesFile("a.mp3", "temp.mp3");
      } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      }
      t2 = System.currentTimeMillis();
      System.out.println("用时:" + (t2 - t1));
    }

}code

可是,这段代码在复制如mp3等大文件时,运行效率很低,即运行时间长。运行时间见图1。
图片1:
对象

为了解决这个问题,可将数据读取由1次读一个字节改成一次读1024个字节甚至更大,可大大提高传输效率。
public static void copyBytesFile2(String sFileName, String dFileName)
throws IOException {
// 建立文件输入流对象和文件输出流对象
// 文件输入流对象与源文件关联
FileInputStream fis = new FileInputStream(sFileName);
// 文件输出流对象与目标文件关联
FileOutputStream fos = new FileOutputStream(dFileName);
// 循环读取文件内容,同时写出到外部文件
byte[] b = new byte[1024 * 10000];
/
从关联的源文件中读多个字节,保存到字节数组b中, 若是到达文件末,返回值为-1,不然返回值为实际读到的字节数。
*/
int read = fis.read(b);
while (read != -1) {
fos.write(b);// 向关联的目标文件写出当前字节数组中的字节数据
read = fis.read(b);
}
// 清空缓存,关闭流对象
fis.close();
fos.close();
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
long t1, t2;
t1 = System.currentTimeMillis();
try {
CopyFile.copyBytesFile2("a.mp3", "temp.mp3");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
t2 = System.currentTimeMillis();
System.out.println("用时:" + (t2 - t1));blog

}

}
运行时间如图2。
图2:
图片

相关文章
相关标签/搜索