黑马程序员技术交流社区

标题: 关于输入流的小问题 [打印本页]

作者: hello菜菜    时间: 2013-10-12 19:39
标题: 关于输入流的小问题
本帖最后由 hello菜菜 于 2013-10-14 11:07 编辑

当需要提取用户输入的数据时,既可以通过Scanner类实现,也可以通过InputStreamReader转换流进行实现,两者的区别在哪?一般用哪个呢?

作者: Jam-l    时间: 2013-10-12 19:44
一个可以使用正则表达式来分析基本类型和字符串的简单文本扫描器。Scanner 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配。然后可以使用不同的 next 方法将得到的标记转换为不同类型的值。
InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,否则可能接受平台默认的字符集。 每次调用 InputStreamReader 中的一个 read()() 方法都会导致从基础输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从基础流读取更多的字节,使其超过满足当前读取操作所需的字节。
作者: bird_not_fat    时间: 2013-10-12 20:35
  1. import java.io.IOException;
  2. import java.io.InputStreamReader;

  3. public class Test1 {
  4.     public static void main(String[] args) {
  5.           String str = readString("请输入字符串:");
  6.           System.out.println("readString 方法的输入:" + str);
  7.       }
  8.     private static String readString(String prompt) {
  9.           BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  10.           String str = null;
  11.          try {
  12.               System.out.print(prompt);
  13.               str = br.readLine();
  14.           } catch (IOException e) {
  15.               e.printStackTrace();
  16.           }
  17.          return str;
  18.       }
  19. }
复制代码
JDK 1.4 及以下的版本中要想从控制台中输入数据只有一种办法,即使用System.in获得系统的输入流,再用转换流InputStreamReader和包装流BufferedReader来获取键盘的输入数据。而且有个很大的缺点,只能获取字符串,还得自己手动去强转。
但是这样太麻烦了,于是JDK5.0中提供了Scanner,其实并不是Scanner将控制台输入给简单化了,只是在其内部的实现中已经将IOException处理了,而且采用InputStreamReader来一个字符一个字符进行扫描读取的,只是Scanner做了更高层次的封装。而且它可以读任何类型的数据,多方便啊。
作者: To    时间: 2013-10-13 13:52
楼主你好,如果问题已解决请将帖子状态修改为提问结束,如果未解决请继续提问,谢谢合作




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2