第四次作业:文件的复制速度

本次我们学习了如何用字节流进行文件的复制,但由于字节复制速度问题,不太适合复制除了文本文档的一些大文件。所以,本次作业,我们就来改进如何去提高文件复制的效率。

Java实现文件拷贝其实质上就是使用java提供的三种文件流操作,字节流,字符流,二进制流。

字节流:FileInputStream 与 FileOutputStream,也就是老师上课所讲的内容,这个复制速度比较慢,字节流读取文件的单位为字节,对于英语字母(只占一个字节)不受任何影响,而对于中文文字在unicode编码为两个字节(或者以上?)则可能会造成影响。

字符流:FileReader 和 FileWriter,字符流读取文件的单位为字符,没有上述字节流的弊端,而且其提供缓冲区读取/写入,更加方便与高效。

二进制流:DataInputStream 和 DataOutputStream,二进制流本质上也属于字节流,但是它在读取/写入文件时把文件内容转化为二进制的方式读取/写入,不易出错而且极为高效,一般用于读取/写入视频等大文件信息。

所以,为了提升文件的复制速度,我们改用二进制流进行复制。代码如下:

package fuzhiwenjian;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class copy {
    public static void main(String[] args) {
        FileOutputStream outputStream;
        try {
            outputStream = new FileOutputStream("b.mp3",true);
            FileInputStream inputStream = new FileInputStream("a.mp3");
            DataInputStream dataInput = new DataInputStream(inputStream);
        DataOutputStream dataOutput = new DataOutputStream(outputStream);
        byte []wxj = new byte[1024];
        int length = dataInput.read(wxj);
        while(length!=-1){
        dataOutput.write(wxj,0,length);
        length = dataInput.read(wxj);

        }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

通过测试,使用二进制流进行文件的复制速度,从运行程序到完成,不到一秒钟的时间。可以说是极大的提升了文件的复制速度。所以,以后在复制大文件时,采用二进制流会更加的高效与快捷。

本次作业使我对字节流与字符流的概念有了更加清晰的认识,也对程序优化方面有了一个笼统的概念,好程序不光需要正确,还要在保证正确的同时,尽可能的提升软件运行处理的速度,这样的软件才是一个好软件。

时间: 2024-08-24 12:27:50

第四次作业:文件的复制速度的相关文章

第四次作业 文件复制速度的提升

请教了很多才得出这个还算有效的方法,虽然不是我自己想出来的,但是我记住了,我觉得自己还是缺乏独立思维的能力所以才每次做作业都很吃力吧,希望会越来越有自己的思维. 原代码为: package proj; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class Copy { public static void main(String []arg

atitit.提升备份文件复制速度(1) -----分析统计问题and解决方案

atitit.提升备份文件复制速度(1) -----分析统计问题and解决方案 1. 现在的情形 1 2. 硬盘信息 大概50mb/s, 50iops 1 3. 统计小的文件比率 2 4. 复制速度估计.. 2 5. 小文件类型比率按照扩展名 2 6. 速度慢的原因:::iops太低的... 4 7. 解决之道::: 4 7.1. 提升到ssd 硬盘. 4 7.2. 清理垃圾 4 7.3. 清理重复文件 5 7.4. 移动pic/isho文件.. 5 7.5. 打包文件.. . 5 8. 清理后

atitit.提升备份文件复制速度(4) ---数据挖掘 获取回收站文件列表

atitit.提升备份文件复制速度(4) ---数据挖掘 获取回收站文件列表 1. 放入回收站的原理and 1 2. info2文件文件结构 1 3. 获得文件列表2个法: 正则表达式or解析 1 4. 路径正则表达式[a-zA-Z]\:[\\a-zA-Z0-9\xB0-\xF7\xa1-\xfe_.~]+ 2 5. 参考 2 1. 放入回收站的原理and info2文件中记录着每个被删除后放入回收站的文件的相应信息,比如驱动器指示器dirve designator ,原删除文件的完整文件名,文

结对作业(软件工程第四次作业)

软件工程第四次作业---代码审查 一.partner 结对伙伴:林路 代码链接:coding 二.代码审查表 功能模块名称 简单的语法分析程序 审查人 王灵杰 审查日期 2018.4.6 代码名称 简单的语法分析程序 代码作者 林路 文件结构 重要性 审查项 结论 头文件和定义文件的名称是否合理? 合理 头文件和定义文件的目录结构是否合理? 合理 版权和版本声明是否完整? 不完整 重要 头文件是否使用了 ifndef/define/endif 预处理块? 没有 头文件中是否只存放"声明"

OutputStream-InputStream-FileOutputStream-FileInputStream-BufferedOutputStream-BufferedInputStream-四种复制方式-单层文件夹复制

字节流两套:         java.lang.Object--java.io.OutputStream--java.io.FileOutputStream         java.lang.Object--java.io.InputStream--java.io.FileInputStream ================================================================== 一.OutputStream 抽象类(java.io) 字节输出

04+罗潇潇+罗潇第四次作业

04+罗潇潇+罗潇第四次作业 1.项目整体管理的过程 (1)项目启动,制定章程 (2)制定初步的项目范围说明书. (3)制定项目管理计划 (4)指导和管理项目执行 (5)监督和控制项目 (6)整体变更 (7)项目收尾 2.项目启动就是以书面的.正式的形式肯定项目的成立与存在,同时以书面正式的形式为项目经理进行授权.项目章程应当由项目组织以外的项目发起人发布,若项目为本组织开发也可以由投资人发布. 3.项目章程包括: (1)基于项目干系人的需求和期望提出的要求. (2)项目必须满足的业务要求和产品

写一个方法进行文件的复制

java中实现文件内的复制,需要新建文件的方法: File file=new File("wubin.txt"); 并且没有这个文件,那么需要将这个文件,创造出来: file.createNewFile(); 当然也可以直接在文件流里面直接创造: FileInputStream  fis=new FileInputStream("wubin.txt"); 意思是在本目录下创建一个wubin.txt的文件,之后创造一个inputstreamreader去获取内容,再通

C#中大文件的复制

最近又学习了两个类,FileStream,这个类是做什么的呢? 先看一下MSDN给出的官方解释 FileStream:公开以文件为主的 Stream,既支持同步读写操作,也支持异步读写操作. 小编理解:主要是以流的形式来操作文件. 什么是流? 在日常生活中,有车流.水流等,而正是有了流的存在,才不至于交通拥挤,洪水爆发,而是以一种流的形式慢慢的来疏通(不知能否理解).比如,我们在操作文件复制的时候,直接复制的话,会把大容量的文件直接放到内存中,导致复制的很慢,而采取流的话,会把文件以二进制的形式

C# IO操作(四)大文件拷贝(文件流的使用)、文件编码

     大文件拷贝(文件流的使用).文件编码 首先说一下大文件拷贝和文件流,因为计算机的内存资源是有限的,面对几个G甚至更大的文件,需要通过程序来完成拷贝,就需要用到文件流(因为我们无法做到把文件一次性加载到内存中:事实上,内存也不允许这么干),所以在C#中出现了内存流这个东西.先看下面的内容,File类中的常用读取文件方法会将文件内容一次性全部加载到内存中: 1 string sPath = @"C:\Users\Chens-PC\Desktop\Nginx.txt"; 2 //F