115 java

4 阅读3分钟

BufferedReader类

 

  • 具体内容

解决中文输入的数据输入操作要使用BufferedReader类来完成,BufferedReader类属于一个缓冲的输入流,而且是一个字符流的操作对象。

但是必须要清楚一点,对于缓冲流java.io中定义有两类:字节缓冲流(BufteredinputStream)、字符缓冲流(BufferedReader) 。

打开java.io包里面有BufteredinputStream和BufferedReader,BufteredinputStream叫做字节缓冲流,BufferedReader叫做字符缓冲流。

字符缓冲流适合处理中文,而除了这个原因之外,BufferedReader在JDK1.0就已经出现了,看BufferedReader类的方法里哪一个是适合于读数据的,会发现有一个readLine()点开里面的public String readline()throws IOException。

所以选择BufferedReader类操作是因为在此类中提供的readLine()方法,这个方法可以直接读取一行数据(以回车为换行符);

 

  • 读取一行:

public String readline()throws IOException

但是如果如果使用BufferedReader类有一个问题需要注意,观察一下BufferedReader类中的定义以及它的构造方法:

readLine()是整个BufferedReader类中最大的亮点。

 

回到程序中找到定义:

public class BufferdReader extends Reader。会发现它继承了Reader。

然后再往下找到构造方法:

public BufferedReader(reader in)接收的还是Reader。

于是这里出现偏差:

首先BufferedReader类里,Reader下有一个BufferedReader,但是它需要接受的是reader 类的对象:

public BufferedReader(Reader in)然后System.in,System.in是整个代码决胜的关键性因素,但是它最大的缺点是它属于Inputstream的实例。这个类型是由系统提供的,问题是BufferedReader类没有地方能够接收这个类型。

之前学过一个类可以把inputstream变成reader,把它叫做InputStreamReader。

InputStreamReader能够接收类型的转换,而且在使用的时候BufferedReader利用public BufferedReader(reader in)实现字节流与字符流的转换处理。

最终结果是由inputstreamReader 接收Sysrem.in而后转换为字符流。

 

范例:

下面利用BufferedReader实现数据的键盘输入

BufferedReader buf= new BufferedReader(new InputStreamReader(system.in));这就是一个转换,之后做一个数据输入:system.out.print(“请输入信息:”)之后String str=buf.readLine();这是接收输入信息,默认使用回车换行。

在BufferedReader里回车作为结束,所以在BufferedReader缺点就在于此。

默认的换行模式是在BufferedReader最大缺点,如果不是因为此缺点,该类还会继续使用。

然后system.out.print(“【ECHO】输入信息为:”+ str)

如下:

执行出现:请输入信息:

跟上今天很好 回车出现【EHCO】今天很好

这样的键盘输入比之前更省事,所以在十多年前的java行业,要实现键盘输入这就是标准格式。

 

使用以上的形式实现的键盘输入还有一个最大的特点,由于接受的数据类型为String,也就证明可以使用正则判断,可以利用String类的各种操作进行数据处理,还可以变为各种常用的数据类型。

 

范例:由键盘输入数字

如果是数字则转型,不是则报错。

比如请输入年龄:

跟上if(str.matches(“\d{1,3}))这地方是一个数字,然后跟上Integer.parseInt(strt),else{System.out.println(“输入的数据有错误!”)}

 

执行出现请输入年龄:输入dsadf执行出现输入的数据有错误!

而重新执行:请输入年龄:输入230

执行出现:【ECHO】输入信息为230

所以,在很多的开发之中依然可能会发现有BufferedReader类的身影,但是随着时间的便宜,基本上使用的频率已经很低了,已经被新的类:Scanner所取代了。

 

二、总结

BufferedReader类读取数据很方便(readLine())。