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:

  • 相关阅读:
    Java Exception
    SuggestFrameWork js代码结构
    博客被管理员丢出来之心情
    HDU--杭电--1195--Open the Lock--深搜--都用双向广搜,弱爆了,看题了没?语文没过关吧?暴力深搜难道我会害羞?
    HDU--杭电--1026--Ignatius and the Princess I--广搜--直接暴力0MS,优先队列的一边站
    HDU--1232--畅通工程--并查集
    杭电--1102--Constructing Roads--并查集
    杭电--1879--继续畅通工程--并查集
    杭电--1875--畅通工程再续--并查集
    杭电--1272--小希的迷宫--并查集
  • 原文地址:https://www.cnblogs.com/slf520/p/5361564.html
Copyright © 2011-2022 走看看