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


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

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

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

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

  • 相关阅读:
    hdu-2814-Interesting Fibonacci-斐波那契周期节
    servletContext
    Java中的NIO和IO的对比分析
    sessionID和cookie
    会话跟踪session cookie
    C++中的头文件和源文件
    C++ 头文件
    二叉线索树
    C 二叉树 1
    C 二叉树
  • 原文地址:https://www.cnblogs.com/xuebagyp/p/5339053.html
Copyright © 2020-2023  润新知