美文网首页
*缓冲输入流(标准键盘输入格式)

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

作者: 秋笙fine | 来源:发表于2019-01-30 22:33 被阅读0次

    缓冲输入流是开发之中经常会使用到的一个工具类,其目的是解决数据的乱码问题。现在最直观的解决方式就是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)。

    相关文章

      网友评论

          本文标题:*缓冲输入流(标准键盘输入格式)

          本文链接:https://www.haomeiwen.com/subject/eelhsqtx.html