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

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

作者: 秋笙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)。

相关文章

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

    缓冲输入流是开发之中经常会使用到的一个工具类,其目的是解决数据的乱码问题。现在最直观的解决方式就是System.i...

  • stdin

    stdin是标准输入,一般指键盘输入到缓冲区里的东西

  • IO流——其他流

    输入输出流,打印流,数据流 标准的输入、输出流 System.in 标准的输入流,默认从键盘输入,类型是Input...

  • Linux 管道符、重定向与环境变量。

    1输入输出重定向 标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也可从其他文件或命令中输入。标准输...

  • ARM之反弹shell

    C代码 获取一个socket的文件描述符 定义好远程地址,使用connect函数连接过去 重定位标准输入流、标准输...

  • Ninetheen Day(IO基本概念)

    输入流:进入Java程序里面输出流:从Java程序输出 inputstream:输入流outputstream:输...

  • android 键盘输入流程

    最近项目需要,需要做一个输入验证码的组件,就如同下图展示的样子。 上面代码mService是InputMethod...

  • Java.IO.BufferedInputStream

    BufferedInputStream流的核心在于预先向缓冲区读入流,read()方法是在缓冲区上操作的(),当使...

  • 64、内核原理探秘_深度剖析document写入原理(buffe

    1、document数据写入流程 (1)数据写入buffer缓冲;(2)buffer缓冲区每隔一段时间(时间不固定...

  • 2020-07-04字符缓冲流

    字符缓冲流 BufferedWriter:将文本写入字符输入流,缓冲字符,以提供单个字符,数组和字符串的高效写入,...

网友评论

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

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