黑马程序员技术交流社区

标题: 关于字节流和字符流的copy文件问题 [打印本页]

作者: 胡庆    时间: 2018-6-25 18:11
标题: 关于字节流和字符流的copy文件问题
通过java来模拟windows的拷贝文件功能
注意:
1.缓冲流会比普通流传输更快
2.对于写入流,在写完之后,必须关闭流(.close)或者刷新流(.flush),不然是空文件.
3.字符流,只能拷贝文本类型的文件.并且高效(缓冲)字符流可以有独特的方法,一行一行的读取数据
4.字节流可以读取任何文件,在java中万物皆字节.
下面我们通过idea来实现以下,高效字节流copy一个MP3类型的文件,并计算所用的时间

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class BufferedInputStreamTest {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        try(BufferedInputStream bis = new BufferedInputStream(new FileInputStream("H:\\酷狗音乐\\雨宗林 - 别把疼你的人弄丢了.mp3"));
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("H:\\aaa\\雨宗林 - 别把疼你的人弄丢了.mp3"))){
                byte [] arr = new byte[1024];
                int len;
                while((len = bis.read(arr)) != -1){
                    bos.write(arr, 0 ,len);
                }
                //bos.close();//这个地方在jdk7之后,我们采取trycatch来处理IO异常,这里可以不用写,自动关闭流.如果采用抛的方式处理异常,就必须关闭流
                //bis.close();
        } catch ( IOException e) {
            e.printStackTrace();
        }
        long end = System.currentTimeMillis();
        System.out.println(end-start);
    }
}
注意,上面代码我们用的是缓冲字节流来进行copy的.对于非文本类型文件,切记不要用字符流来进行拷贝,不然拷贝出来的文件打开是乱码,并且文件会变大很多
规范的关闭流遵从先创建的后关闭,的原则.









欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2