*缓冲输入流(标准键盘输入格式)

缓冲输入流是开发之中经常会使用到的一个工具类,其目的是解决数据的乱码问题。现在最直观的解决方式就是System.in所带来的问题。
如果要进行中文数据的处理,想到的一定是字符流,要想完整的处理数据,一定想到缓冲区。支持缓冲区操作的有两种流:
字符缓冲区流:BufferedReader,BufferedWriter:
字节缓冲区流:BufferedInputStream.BufferedOutputStream

最为重要的就是BufferedReader类,因为其提供有一个重要的提取方法(重点)

public String readLine()
读取一行数据,以分隔符(换行为界),返回了String。可以用正则验证,可以转为任何类型。

下面继续来观察一下BufferedReader类的继承结构和构造方法:
java.lang.Object
java.io.Reader
java.io.BufferedReader

构造方法:public BufferedReader(Reader in)

但是如果要想BufferedReader类来处理System.in的操作就比较麻烦了 因为System.in是InputStream类型。在之前学习过一个类:InputStreamReader.
范例:键盘数据输入的标准格式


    public static void main(String[] args) throws Exception{
        //System.in是InputStream类的对象
        //BufferedReader需要接收Reader类的构造
        //利用InputStreamReader将字节流变为字符流
        BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
        System.out.println("请输入数据:");
        String str=buf.readLine();//以回车作为换行
        System.out.println("输入的内容:"+str);
    }

此时的输入数据长度没有限制,并且得到的还是String型数据,那么这样就可以实现键盘输入数据操作了,不过这种操作一般意义不大。
一直强调使用BufferedReader是因为它可以实现字符串数据的接收,所以现在可以进行正则判断:

判断:正则判断输入:

  public static void main(String[] args) throws Exception{
        //System.in是InputStream类的对象
        //BufferedReader需要接收Reader类的构造
        //利用InputStreamReader将字节流变为字符流
        BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
        boolean flag=true;
        while(flag){
        System.out.println("请输入年龄:");
        String str=buf.readLine();//以回车作为换行
        if(str.matches("\\d{1,3}")){//如果输入的是数字
            System.out.println("年龄是:"+Integer.parseInt(str));
            flag=false;
        }else{
            System.out.println("年龄输入错误,应该由数字组成");
        }

        }
    }

正是因为此处可以利用正则进行操作验证,所以在开发之中,只要能够接收的类型是String,那么是最方便的。
除了可以接收输入信息之外,也可以利用缓冲区读取进行文件的读取。


    public static void main(String[] args) throws Exception{
        File file=new File("E:"+File.separator+"my.txt");
        BufferedReader buf=new BufferedReader(new FileReader(file));
        String str=null;
        while((str=buf.readLine())!=null){//利用缓存输入流可以读取返回String的特性
            System.out.println(str);
        }
        buf.close();
    }

与直接使用InputStream(Reader)类相比,使用BufferedReader在进行文件信息读取的时候会更加方便(仅文件,二进制不推荐)

总结

读取数据不再直接使用InputStream(BufferedReader),就好比输出不再直接使用OutputStream一样(PrintStream)。

猜你喜欢

转载自blog.csdn.net/weixin_33693070/article/details/87040383