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:

  • 相关阅读:
    指定盘符获取u盘PID、VID、序列号等信息
    禁用u盘再启用
    golang 使用编译选项-H=windowsgui后,仍然输出log到console
    c#实现"扫描检测硬件改动"
    哈希表
    Python 环境搭建
    Python 简介
    Python 基础教程
    7.1.2 定义改进的Sales_date类
    第七章 类
  • 原文地址:https://www.cnblogs.com/slf520/p/5361564.html
Copyright © 2011-2022 走看看