介绍:在javaIO阶段学习中,我认为缓冲流完全没有花费大的精力去进行学习,因为缓冲流其最初设计的主要作用是帮助字节流和字符流增强其传输效率而言的,但是经过测试发现,缓冲流能干的事情,我们通过字节流或者字符流增加一个数组同样可以做到,而且效率提升的更高,在java中有字节缓冲流、字符缓冲流,主要目的是提高读写效率。当然字符缓冲流的作用一次可以读取一行,也不容忽视。
一、字节缓冲流
输入(读/input):
构造方法:public BufferedInputStream(InputStream);创建一个缓冲输入流对象,其参数是基本的字节输入流,InputStream是抽象类,所以我们要传入其实现子类,也就是FileInputStream
范例:
BufferedInputStream bis=new BufferedInputStream(new FileInputStream("D:/src.exe"));//我这里的地址写的绝对地址
输出(写/output);
构造方法 : public BufferedOutputStream(OutputStream out) : 创建一个缓冲输出流对象, 其参数是基本的字节输出流,OutputStream是一个抽象类,所以为们要传入其子类也就是FileOutputStream
范例:
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("D:/src1.exe"));
案例:拷贝文件测试效率
普通字节流,单个字节拷贝
字节流+自定义数组拷贝
普通字节拷贝文件大小314M
耗时:2404毫秒
自定义字节数组设置为8192个,进行拷贝
文件大小314M,耗时:436毫秒
字节缓冲流进行拷贝
文件大小314M
耗时:8407毫秒
缓冲流+自定义数组进行拷贝
文件大小314M
耗时:406毫秒
二、字符缓冲流
输入(Read):
1、构造方法 : public BufferedReader(Reader in) : 创建高效的字符输入流对象, 参数需要接收一个基本的字符输入流。
2、特殊功能 : public String readLine() : 包含该行内容的字符串,不包含换行符,如果已到达流末尾,则返回 null
输出(Write):
1、构造方法 : public BufferedWriter(Writer out) : 创建高效的字符输出流对象, 参数需要接收基本字符输出流。
2、特殊功能 : public void newLine() : 写入一个行分隔符,这个行分隔符是由系统决定的(具有跨平台作用,在mac(\r)、windows(\n、\r、\r\n)、linux(\n)中换行各不相同)。
注意:缓冲流不具备读写功能, 只提供缓冲区, 读写操作,还是需要依赖于基本的流