系列文章目录

文章目录

  • 系列文章目录
  • 一、缓冲IO流是什么?
  • 换行问题
  • 二、代码
  • 总结

一、缓冲IO流是什么?

缓冲IO流 是处理流 ,负责在其它IO流基础上增加缓冲功能
我们需要注意的是
BufferedReader 只能对应 Reader,同理可得如下
BufferedReader —> Reader
BufferedWriter —> Writer
BufferedInputStream —> InputStream
BufferedOutputStream —> OutputStream

BufferedReader除了继承了Reader的那些读的方法,还增加了一个:String readLine()读取一行
BufferedWriter除了继承了Writer的那些写的方法,还增加了一个:void newLine()写换行符
默认的缓冲区的大小:8192字节/字符

比如说我们还是读取一个文件

00022.10 缓冲IO流  Buffered_java


复制一份文件

00022.10 缓冲IO流  Buffered_System_02


00022.10 缓冲IO流  Buffered_文件读写_03


流的关闭是有继承的,关闭了外层,内层也会被关闭

00022.10 缓冲IO流  Buffered_java_04

00022.10 缓冲IO流  Buffered_缓冲IO流_05

换行问题

00022.10 缓冲IO流  Buffered_缓冲IO流_06


处理办法

00022.10 缓冲IO流  Buffered_System_07

二、代码

package com.atguigu.test07;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import org.junit.Test;

/*
 * 缓冲IO流:
 *   是处理流,负责在其他IO流基础上增加缓冲功能。提高效率
 *   
 * BufferedReader ---> Reader
 * BufferedWriter ---> Writer
 * BufferedInputStream ---> InputStream
 * BufferedOutputStream ---> OutputStream
 *   
 *   
 * BufferedReader除了继承了Reader的那些读的方法,还增加了一个:String readLine()读取一行
 * BufferedWriter除了继承了Writer的那些写的方法,还增加了一个:void newLine()写换行符
 * 默认的缓冲区的大小:8192字节/字符
 */
public class TestBuffered {
	@Test
	public void test01() throws IOException{
		//用它来读取一个文件,因为控制台只能显示文本数据,所以我们这里用纯文本文件来演示
		FileReader fr = new FileReader("1.txt");
		BufferedReader br = new BufferedReader(fr);
		
		//数据:1.txt --> fr --> br
		String str ;
		while((str = br.readLine()) != null){
			System.out.println(str);
		}
		
		br.close();
		fr.close();
	}
	
	@Test
	public void test02()throws IOException{
		long start = System.currentTimeMillis();
		FileReader fr = new FileReader("1.txt");
		BufferedReader br = new BufferedReader(fr);
		
		FileWriter fw = new FileWriter("11.txt");
		BufferedWriter bw = new BufferedWriter(fw);
		
		String str ;
		数据:1.txt --> fr --> br --> str --> bw --> fw -- >11.txt
		while((str = br.readLine()) != null){
			bw.write(str);
			bw.newLine();//换行
		}
		
		bw.close();
		fw.close();
		br.close();
		fr.close();
		
		long end = System.currentTimeMillis();
		System.out.println("毫秒:" + (end-start));
	}
	
	
	@Test
	public void test03() throws IOException{
		long start = System.currentTimeMillis();
		copy("D:/software/IDEA/ideaIU-Ultimate-2017.1.4.exe","d:/idea.exe");
		long end = System.currentTimeMillis();
		System.out.println("毫秒:" + (end-start));
	}
	
	//复制任意类型的文件的功能
	//任意类型的文件,只能选择字节流
	public void copy(String srcFilename , String destFilename) throws IOException{
		FileInputStream fis = new FileInputStream(srcFilename);
		BufferedInputStream bis = new BufferedInputStream(fis);//fis比喻成里衣,bis是外套
		
		FileOutputStream fos = new FileOutputStream(destFilename);
		BufferedOutputStream bos = new BufferedOutputStream(fos);
		
		byte[] arr = new byte[10];
		int len;
		//数据: srcFilename --> fis --> arr --> fos --> destFilename
		while((len = bis.read(arr)) !=-1){
			bos.write(arr, 0, len);
		}
		
		bis.close();//先脱外套
		fis.close();//再脱里衣
		
		bos.close();
		fos.close();
	}
	
	@Test
	public void test05()throws IOException{
		FileWriter fw = new FileWriter("22.txt");
		fw.write("hello");
//		fw.write("\n");
		fw.write("\r\n");//\r本行结束,\n把光标移动到下一行
		fw.write("world");
		fw.close();
	}
}

总结

缓冲IO流 Buffered效率会快很多