java中的缓冲输入流学习总结

        • 一、基本内容
        • 二、BufferedReader类的继承结构图:

一、基本内容

   在JDK1.5之前,BufferedReader是一个非常重要的数据读取的操作类,如果要进行输入流的操作,尤其是文件操作,都建议使用BufferedReader类使用。

   BufferedReader类属于Reader的子类,负责进行缓冲区的读取,由于其本身属于字符输入流,所以更加适合输入中文文字信息。


二、BufferedReader类的继承结构图:

java中的缓冲输入流学习总结_第1张图片

  在BufferedReader类中提供有两个重要的方法

  • 构造方法:public BufferedReader(Reader in);
  • 数据读取方法:public String readLine() throws IOException(非常重要的方法)

范例:BufferedReader实现数据的输入。
分析:
数据输入要使用System.in,而System.in是InputStream类型。
BufferedReader类的构造需要接收Reader类型,那么需要将字节输入流变为字符输入流,使用InputStreamReader

package lisy;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;

public class CopyDemo {
    public static void main(String[] args) throws Exception {
        BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("请输入信息: ");
        String str = buf.readLine();
        System.out.println("输入信息为: "+str);
    }
}

以上的代码已经成功的实现了键盘输入数据,并且也可以直接按照字符串返回,不过这种实例化对象进行中的操作是不可取的。

先在有了BufferedReade类对象,那么之后就可以进行一些输入验证的操作了。
比如说:要求输入年龄,如果输入的不是数字,则提示错误。

package lisy;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;

public class CopyDemo {
    public static void main(String[] args) throws Exception {
        BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
        boolean flag = true;
        while(flag) {
        System.out.println("请输入年龄: ");
        String str = buf.readLine();
        if(str.matches("\\d+")) {
        System.out.println("输入年龄为: "+Integer.parseInt(str));
        flag = false;
        }else {
            System.out.println("请输入正确的年龄信息。");
            }
        }
    }
}

以上的两个范例都是围绕着键盘输入数据的操作进行的,不过使用BufferedReader类还有一个好处是可以进行大文本的读取。
范例:利用BufferedReader读取文件的信息。

package lisy;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;

public class CopyDemo {
    public static void main(String[] args) throws Exception {
        BufferedReader buf = new BufferedReader(new FileReader(new File("E:" + File.separator + "my.txt" )));
        String string = null;
        while((string = buf.readLine()) != null) {
        System.out.println(string);
        }
        buf.close();
    }
}

虽然BufferedReader 类比较好用,但是在输入数据的时候已经不是首选了。而是次要的选择。

你可能感兴趣的:(java)