缓冲字符流BufferedReader/BufferedWriter

 

缓冲字符流BufferedReader/BufferedWriter

缓冲的字符流的出现提高了对流的操作效率,原理就是将数组进行封装

在使用缓冲的字符流对象时,缓冲的存在是为了增强流的功能,因此在建立缓冲的字符流对象时,要先有流对象的存在

BufferedReader的特有方法:public String readLine();//一次读一行,到行标记时,将行标记之前的字符数据作为字符串返回。当读到末尾时,返回null。

BufferedWriter的特有方法:public void newLine();//写出平台相关的行分隔符来标记一行的终止。Windows平台下为’\n’。

缓冲字符流的使用

       FileWriter fw=null;

       BufferedWriter bw=null;

       //缓冲字符输出流去写入数据

       try {

            fw=new FileWriter("demo.txt");

            bw=new BufferedWriter(fw);

            bw.write("Hello");

            bw.newLine();//换行符标记

            bw.write("Java");

            bw.newLine();

            bw.flush();//把缓冲区里的内容刷新到目的地

       } catch (IOException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }finally{

           if(bw!=null){

              try {

                  bw.close();

              } catch (IOException e) {

                  // TODO Auto-generated catch block

                  e.printStackTrace();

              }

       //读出

       FileReader fr=null;

       BufferedReader br=null;

      

       try {

           fr=new FileReader("demo.txt");//节点流

           br=new BufferedReader(fr,255);//255为缓冲区的大小

           String str=null;//用于存储每一次读取出来的数据

           while((str=br.readLine())!= null){

              System.out.println(str);

           }

       } catch (FileNotFoundException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       } catch (IOException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }finally{

           if(br!=null){

              try {

                  br.close();

              } catch (IOException e) {

                  // TODO Auto-generated catch block

                  e.printStackTrace();

              }

自己建的缓冲字符输入流

package a;

import java.io.*;

public class MyBufferedReader {

    //自己定义缓冲区,类里面的属性

    private Reader r;//代表普通输入流对象

    //构造方法

    public  MyBufferedReader(Reader r){

       this.r=r;

    }

    //read方法,读一行的readLine()方法:增加一个缓冲区,然后调用r对象的read()方法读取字符放到缓冲区,当读到

    //行标记时,说明这一行结束了,把缓冲区中的字符转换成字符串

    public String readLine(){//返回类型是字符串

       //缓冲区

       StringBuffer strB=new StringBuffer();

       //读到行标记就停,不是行标记继续读

       int ch=0;//存储字符

       try {

           while((ch=r.read())!=-1){

              if(ch=='\r')//读到回车符,继续【回车符是把光标移到本行的最前面】

                  continue;

              if(ch=='\n'){

                  //读到换行符了,就返回

                  return strB.toString();//return new String(strB);这两句相等

              }else{

                  //读到的不是换行符,就把读到的放到缓冲区中

                  strB.append((char)ch);

              }

           }

       } catch (IOException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

       //没有行标记了,直接到文件末位了,文件结束了,文件结束标志

       if(strB.length()!=0)

           return new String(strB);

       return null;

    }

    //close方法

    public void close(){

       try {

           r.close();

       } catch (IOException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

      

    }

}

装饰设计模式比继承有更好的灵活性

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值