System.in是标准输入流对象,可以通过调用它的read()方法从键盘读入数据。由于输入比输出更容易出错,而且可能用户不小心的一个输入错误就会导致整个程序计算结果出错甚至引发程序的中断退出,因此,Java对输入操作强制设置了异常保护。用户在编写的程序中必须抛出异常或捕获异常,否则程序将不能编译通过。以下为输入流对象in可以调用的read()方法。
int read():读入一个字节数据,其值(0~255)被以int整型格式返回。
int read(byte[]b):读入一个字节数组的数据。
int read(byte[]b,int off,int len):读入一个字节数组中从off开始的len个字节数据。
【例8.1】 标准输入方法举例。
上述程序的输出结果如下所示:
请输入abcdefghijklmno(回车换行)
a
bcd
efghij
输入流中还有多余7个字节
程序一开始输入了abcdefghijklmno,其中“c1=(byte)System.in.read();”语句将第一个a(即97,因为a字符的ASCⅡ码值为97)赋值给字节类型变量c1。 “System.in.read(c2);” 语句自动读入3个字符(即bcd)数据到c2数组。而“System.in.read(c3,0,6);”又读入接着的6个字节数据(即efghij),最后还剩字符“klmno” (事实上,还应该包括回车换行这两个控制字符,这点可以从后面的System.in.available()返回值为7得到验证)。然后,通过调用标准输出方法对获取的字节数据进行输出显示。
Java采用双字节存储字符,是为了将字符与汉字统一起来,方便处理。上述标准输入提供的read()方法显然不够方便,因为它是以单个字节或字节数组的方式获取输入的,而通常需要用户输入的却是其他类型的,如字符串、int、double等,怎么办呢?Java采用了一种称为Decorator(包装)的设计模式来对标准输入进行功能扩充。(www.daowen.com)
原本System.in标准输入流对象只能提供以字节为单位的数据输入,通过引入Input-StreamReader和BufferedReader类的对象对其进行两次包装(第一次将System.in对象包装为reader对象的内嵌成员,第二次又将reader对象包装为input对象的成员),这样就可以使用BufferedReader类提供的readLine()方法,实现以行为单位(即对应字节数据流中以回车换行符为间隔)的字符串输入功能。当获取到字符串数据后,还可以根据具体的数据类型进行相应的转换,如[例8.2]所示。
【例8.2】 扩充的标准输入方法。
程序运行结果如下:
请输入字符串数据:
i love china
刚输入的字符串为:i love china
请输入单精度浮点数
7.8f
刚输入的单精度浮点数为7.8
请输入双精度浮点数:
8.7
刚输入的双精度浮点数为8.7
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。