zoukankan      html  css  js  c++  java
  • 关于如何提高文件的传输效率小结

    下面的代码可以实现以字节为单位复制文件的功能,适合复制非文本类型的文件。
    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:

  • 相关阅读:
    jmeter(46) redis
    jmeter(45) tcp/ip协议
    Codeforces Round #538 (Div. 2)D(区间DP,思维)
    Codeforces Global Round 1D(DP,思维)
    Educational Codeforces Round 57D(DP,思维)
    UPC11073(DP,思维)
    Yahoo Progamming Contest 2019D(DP,思维)
    Atcoder Beginner Contest 118D(DP,完全背包,贪心)
    Xuzhou Winter Camp 1C(模拟)
    Educational Codeforces Round 57 (Rated for Div. 2)D(动态规划)
  • 原文地址:https://www.cnblogs.com/slf520/p/5361564.html
Copyright © 2011-2022 走看看