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())。