java基础十---IO字符流Reader

Reader :用于读取字符流的抽象类。 子类必须实现的唯一方法是read(char [],int,int)和close()。 然而,大多数子类将覆盖这里定义的一些方法,以便提供更高的效率,附加的功能或两者。

常用函数:

  1.  close()  关闭流并释放与之相关联的任何系统资源。 
  2.  read(char[] cbuf, int off, int len)  将字符读入数组的一部分。

已知子类:

1.BufferedReader : 包装类,使用缓冲技术高效的读取数据

         从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取。 可以指定缓冲区大小,或者可以使用默认大小。 默认值足够大,可用于大多数用途。通常,由读取器做出的每个读取请求将引起对底层字符或字节流的相应读取请求。 因此,建议将BufferedReader包装在其read()操作可能耗时的读取器上,例如FileReaders和InputStreamReaders。

 构造函数:BufferedReader(Reader in, int sz) 
 常用函数:

    1.  read(char[] cbuf, int off, int len) 将字符读入数组的一部分。
    2.  readLine() 读一行文字。

2.InputStreamReader :可以实现字节流转字符流:它读取字节,并使用指定的charset将其解码为字符。

   构造函数:public InputStreamReader(InputStream in, String charsetName)

   常用函数:read(char[] cbuf, int off, int len) 将字符读入数组的一部分。

已知子类:

       3.FileReader

          构造函数:FileReader(File file)  创建一个新的FileReader ,给出 File读取。

          常用函数:  read(char[] cbuf, int off, int len) 将字符读入数组的一部分。

 

4.CharArrayReader:该类实现了一个字符缓冲区,可以用作字符输入流。 

  构造函数:CharArrayReader(char[] buf, int offset, int length) 

  常用函数:read(char[] b, int off, int len) 将字符读入数组的一部分。 

5.FilterReader :用于读取过滤后的字符流的抽象类。

抽象类FilterReader本身提供了将所有请求传递给包含的流的默认方法。 
已知子类:

    6.PushbackReader :一个字符流读取器,允许将字符推回到流中。

        构造函数:PushbackReader(Reader in, int size) 

        常用函数:unread(char[] cbuf, int off, int len)  通过将一部分字符复制到推回缓冲区的前端来推回。

 7.PipedReader :管道流

   PipedReader 必须和 PipedWriter 一起使用,PipedWriter 写数据 PipedReader  读取写入的数据。类似管道一般,从一端发送  数据,另外一端接收数据。

   构造函数: PipedReader(PipedWriter src, int pipeSize) 

   常用函数:  

      1. connect(PipedWriter src) :使这个管道读取器连接到管道写入器 src 。 
      2. read(char[] cbuf, int off, int len) :从这个管道数据流读取最多 len字符数组。 (没有数据的情况下此方法会阻塞)

8.StringReader :字符串流

   构造函数: public StringReader(String s)

   常用函数:read(char[] cbuf, int off, int len) 
 

9.LineNumberReader:缓冲字符输入流,跟踪行号。

  构造函数: LineNumberReader(Reader in) 

  常用函数:

     1.readLine() 读取一行数据
     2.read(char[] cbuf, int off, int len)  将字符读入数组的一部分。 
     3.getLineNumber()  获取当前行号。   
     4.setLineNumber(int lineNumber)  设置当前行号。 

使用示例:

    //FileReader 函数使用示例
    public static String fileReaderTest(String path) {
        File file = new File(path);
        if (!file.exists()) {
            return null;
        }
        FileReader fileReader=null;
        try {
            fileReader = new FileReader(file);
            char[] tempBuff = new char[1024];
            StringBuilder stringBuilder=new StringBuilder();
            int len=0;
            while ((len=fileReader.read(tempBuff))!=-1) {
                stringBuilder.append(new String(tempBuff,0,len));
            }
            return  stringBuilder.toString();
        } catch (FileNotFoundException e) {

        } catch (IOException e) {

        }finally {
             if(fileReader!=null){
                 try {
                     fileReader.close();
                 } catch (IOException e) {
                     e.printStackTrace();
                 }
             }
        }
        return "";
    }
    //FileReader增加缓冲技术的用法,使用BufferedWriter包装类
    @RequiresApi(api = Build.VERSION_CODES.KITKAT)
    public static String BufferedReaderTest(String path) {
          File file=new File(path);
          if(!file.exists()){
            return null;
          }
          //try 里面申请的资源,try执行完以后,自动调用close方法
          try (BufferedReader bufferedReader=new BufferedReader(new FileReader(file))){
              String data="";
              StringBuilder stringBuilder=new StringBuilder();
              while ((data=bufferedReader.readLine())!=null){
                  stringBuilder.append(data);
              }
              return stringBuilder.toString();
          }catch (IOException ex){}
        return "";
    }
    //字节流转字符流
    public static String  OutputStreamReaderTest(InputStream in){
        InputStreamReader outputStreamReader=new InputStreamReader(in);
        CharBuffer charBuffer= CharBuffer.allocate(1024);
        StringBuilder stringBuilder=new StringBuilder();
        int len=0;
        try {
            while ((len=outputStreamReader.read(charBuffer))!=-1){
                Log.e(TAG,"OutputStreamReaderTest==>"+charBuffer.toString());
                stringBuilder.append(charBuffer.toString());
                char[] s=charBuffer.array();
            }
            return  stringBuilder.toString();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
           if(outputStreamReader!=null)
               try {
                   outputStreamReader.close();
               } catch (IOException e) {
                   e.printStackTrace();
               }
        }
        return "";
    }

 

 

  

  

  

 

 

 

  

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值