【Java菜鸟 03】InputStreamReader 和BufferedReader

本文介绍了 Java 中 BufferedReader 和 InputStreamReader 的使用方法,展示了如何利用这些类从文件或标准输入读取文本数据。通过示例代码解释了如何进行字符流的转换及高效读取。

1、BufferedReaderDemo.java

package org.algorithm;

import java.io.*;

/*
 * (为了读取)
 * public class BufferedReader extends Reader
 * 
 * 从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高校读取;
 * 可以指定缓冲区的大小,或者可使用默认的大小。
 * 
 * BufferedReader 流能够读取文本行 , 通过向 BufferedReader 传递一个 Reader 对象 , 
 * 来创建一个 BufferedReader 对象 , 之所以这样做是因为 FileReader 没有提供读取文本行的功能 .
 * */
public class BufferedReaderDemo {

    /*
     * InputStreamReader 和 BufferedReader 的区别
     * */
    public static void main(String[] args) throws IOException {//throws IOException抛出异常
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));

        System.out.println("请输入一些列文字,可包括空格:");
        String text = bufferedReader.readLine();
        System.out.println("请输入文字:"+text);
    }

    /*
     * throws IOException   抛出异常
     * 
     * InputStreamReader 是字节流通向字符流的桥梁
     * */
}

2、InputStreamReaderDemo.java

package org.algorithm;
import java.io.*;
/* 
 * (为了输入)
 * 
 * InputStreamReader:将字节流转换成字符流,是字节流向字符流转换的桥梁。
 * 由于文本文件中存放的都是字节流,而程序中需要的是字符流,所以使用InputStreamReader来
 * 将文本文件转换成字符流,有利于进一步的操作。
 * 
 *  //构造一个默认编码集的InputStreamReader类
 *  InputStreamReader isr = new InputStreamReader(InputStream in);
 *   
 *  //构造一个指定编码集的InputStreamReader类
 *  InputStreamReader isr = new InputStreamReader(InputStream in,String charsetName); 
 *  
 *  //读取键盘上的数据
 *  参数 in对象通过 InputStream in = System.in;
 *  
 *  //读取文件中的数据
 *  或者 InputStream in = new FileInputStream(String fileName);
 *  可以看出 FileInputStream 为InputStream的子类
 *  
 *  //读取单个字符
 *  int read();
 *  
 *  ;//将读取到的字符存到数组中。返回读取的字符数
 *  int read(char []cbuf);
 *  
 * */

class InputStreamReaderDemo {
  public static void transReadNoBuf() throws IOException {
    /**
     * 没有缓冲区,只能使用read()方法。
     */
    //读取字节流
    //InputStream in = System.in;//读取键盘的输入。
    InputStream in = new FileInputStream("D:\\demo.txt");//读取文件的数据。
    //将字节流向字符流的转换。要启用从字节到字符的有效转换,
    //可以提前从底层流读取更多的字节.
    InputStreamReader isr = new InputStreamReader(in);//读取
    //综合到一句。
    //InputStreamReader isr = new InputStreamReader(
    //new FileInputStream("D:\\demo.txt"));

    char []cha = new char[1024];
    int len = isr.read(cha);
    System.out.println(new String(cha,0,len));
    isr.close();

  }
  public static void transReadByBuf() throws IOException {
    /**
     * 使用缓冲区 可以使用缓冲区对象的 read() 和  readLine()方法。
     */
    //读取字节流
    //InputStream in = System.in;//读取键盘上的数据
    InputStream in = new FileInputStream("D:\\demo.txt");//读取文件上的数据。
    //将字节流向字符流的转换。
    InputStreamReader isr = new InputStreamReader(in);//读取
    //创建字符流缓冲区
    BufferedReader bufr = new BufferedReader(isr);//缓冲
    //BufferedReader bufr = new BufferedReader(
    //new InputStreamReader(new FileInputStream("D:\\demo.txt")));可以综合到一句。
      /*int ch =0;
    ch = bufr.read();
    System.out.println((char)ch);
    */
    String line;
    while((line = bufr.readLine())!=null){
      System.out.println(line);
    }
    isr.close();
  }
}

3、Instance

package org.algorithm;

import java.io.*;
class UtilResource {
    private static void initializeResource() {
        try {
          //读取文件,并且以utf-8的形式写出去
          BufferedReader bufread;
          String read;
          bufread = new BufferedReader(new InputStreamReader(new FileInputStream("e:\\input.txt"))); 
          /*
           * FileInputStream("e:\\input.txt"): 用于输入文本文件
           * 
           * InputStreamReader(new FileInputStream("e:\\input.txt")): 用于将文本文件的字节流转换为字符流
           * 
           * BufferedReader(new InputStreamReader(new FileInputStream("e:\\input.txt"))):用于缓冲字符,便于高效读取
           * */
          while ((read = bufread.readLine()) != null) {
            System.out.println(read);
          }
          bufread.close();
        } catch (FileNotFoundException ex) {
          ex.printStackTrace();
        } catch (IOException ex) {
          ex.printStackTrace();
        }
      }

    public static void main(String args[]){
        initializeResource();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值