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

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

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

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

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

posted on 2016-04-05 22:22  我才是高云鹏  阅读(596)  评论(1编辑  收藏  举报

导航