IO流——BufferedReader和BufferedWriter
Posted 开拖拉机的蜡笔小新
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IO流——BufferedReader和BufferedWriter相关的知识,希望对你有一定的参考价值。
BufferedReader和BufferedWriter
字符流的缓冲区:缓冲区的而出现提高了对数据的读写效率
对应类:BufferedWriter BufferedReader
缓冲区要结合流才可以使用,在流的基础上对流的功能进行了增强。实际上BufferedReader和BufferedWriter是对FileReader和FileWriter的装饰模式。
BufferedWriter:
bufw.newLine();
public class BufferedWriterDemo { private static final String LINE_SEPARATOR =System.getProperty("line.separator"); public static void main(String[] args) throws IOException { FileWriter fw= new FileWriter("buf.txt"); //为了提高效率。使用字符流的缓冲区 //创建了一个字符写入流的缓冲区对象,并和指定缓冲流对象相关联 BufferedWriter bufw=new BufferedWriter(fw); //使用缓冲区的写入方法将数据先写入缓冲区中 //bufw.write("afdafdsdgg"+LINE_SEPARATOR+"fggag"); bufw.write("xifasf2"); bufw.newLine(); bufw.write("xifasf"); for (int x = 0; x <4; x++) { bufw.write("xifasf"); bufw.newLine(); } //使用缓冲区的刷新方法将数据刷到目的地中 //bufw.flush(); //关闭缓冲区。其实关闭的就是缓冲的流对象 bufw.close(); } }
BufferedReader:
line=buf.readLine()
public class BufferedReaderDemo { public static void main(String[] args) throws IOException { FileReader fr= new FileReader("buf.txt"); BufferedReader buf=new BufferedReader(fr); String line=null; while((line=buf.readLine())!=null){ System.out.println(line); } buf.close(); }
练习: 自定义的读取缓冲区。其实就是模拟BufferedReader。
分析:
* 缓冲区中无非就是封装了一个数组
* 并对完提供了更多的方法对数组进行访问
* 其实这些方法最终操作的都是数组的角标
* 缓冲的原理:
* 其实就是从源中获取一批数据装进缓冲区中
* 在从缓冲区中不断取出一个一个数据
* 在此次取完后,再从源中继续取一批数据进缓冲区
* 当源中的数据取光时,用-1作为结束标记
public class MyBufferedReader { private FileReader r; //定义一个数组作为缓冲区 private char[] buf=new char[1024]; //定义一个指针用于操作这个数组中的元素。当操作到最后一个元素后,指针归0; private int pos=0; //定义一个计数器用于记录缓冲区的数据个数。当数据减到0,就从源中继续读取数据到缓冲区中。 private int count=0; MyBufferedReader(FileReader r){ this.r=r; } public int myRead() throws IOException{ if(count==0){ count=r.read(buf); pos=0; } if(count<0){ return -1; } char ch=buf[pos++]; count--; return ch; } public String myReadLine() throws IOException{ StringBuilder sb=new StringBuilder(); int ch=0; while ((ch=myRead())!=-1){ if(ch==‘\r‘) continue; if(ch==‘\n‘) return sb.toString(); //将缓冲区中读到的字符,存储到缓存行数据的缓存区中。 sb.append(ch); } if(sb.length()!=0){ return sb.toString(); } return null; } }
以上是关于IO流——BufferedReader和BufferedWriter的主要内容,如果未能解决你的问题,请参考以下文章
IO流——BufferedReader和BufferedWriter
IO流25 - 字符流 - 字符输出流的缓冲流以及字符输入流的缓冲流BufferedWriter和BufferedReader
J06-Java IO流总结六 《 BufferedReader和BufferedWriter 》
缓冲输入输出流[也叫包装流] BufferedInputStream,BufferedOutputStream,BufferedReader和BufferedWriter