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


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

    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));

    }
    

    }

    但是,这段代码在复制如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));

    }
    

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

  • 相关阅读:
    用算法合并数组
    Redis各个数据类型的使用场景
    seesion工作原理
    自删除道指令程序
    uva 1335
    《生活在Linux中》之:使用Bash就是使用Emacs
    手动配置S2SH三大框架报错(三)
    数据和C
    IOS之【地图MapKit】
    我工作这几年(五)-- Android学习4.5月总结(一)
  • 原文地址:https://www.cnblogs.com/slf520/p/5361564.html
Copyright © 2020-2023  润新知