黑马程序员技术交流社区

标题: IO—接收键盘录入,性能提升 [打印本页]

作者: bowen-xiao    时间: 2015-1-19 13:44
标题: IO—接收键盘录入,性能提升
  1.         /**
  2.          * 需求:接收键盘输入,将输入字符转成大写并按回车输出
  3.          * 当输入over时程序退出
  4.          * @throws Exception
  5.          * @since JDK 1.6
  6.          */
  7.         public void sysInTest() throws Exception {
  8.                 InputStream fis = (InputStream)System.in;
  9.                 StringBuilder stb = new StringBuilder();
  10.                 while(true){
  11.                         int ch = fis.read();
  12.                         if('\r' == ch)
  13.                                 continue;
  14.                         if('\n' == ch){
  15.                                 String s = stb.toString();
  16.                                 if(s.equals("over")){
  17.                                         break;
  18.                                 }else{
  19.                                         System.out.println(s.toUpperCase());
  20. //                                        清空数据
  21.                                         stb.delete(0, stb.length());
  22.                                 }
  23.                         }else{
  24.                                 stb.append((char)ch);
  25.                         }
  26.                 }
  27.                
  28.         }
复制代码
  1. /**
  2.          * 需求:接收键盘输入,将输入字符转成大写并按回车输出
  3.          * 当输入over时程序退出
  4.          * 性能提升:用InputStreamReader进行转换成字符流
  5.          * 再能过缓冲区读取
  6.          * InputStreamReader 是字节流通向字符流的桥梁
  7.          * @throws Exception
  8.          * @since JDK 1.6
  9.          */
  10.         public void sysInTest2() throws Exception {
  11. //                先接收键盘录入
  12.                 InputStream in = (InputStream)System.in;
  13. //                创建一个转化流,把字节流转换成字符流
  14.                 InputStreamReader red = new InputStreamReader(in);
  15. //                创建字符流缓冲区,为提高读取效率
  16.                 BufferedReader bfr = new BufferedReader(red);
  17.                
  18.                 String stb = null;
  19.                
  20.                 while((stb = bfr.readLine()) != null){
  21.                         if("over".equals(stb)){
  22.                                 bfr.close();
  23.                                 System.exit(0);
  24.                         }
  25.                         System.out.println(stb.toUpperCase());
  26.                 }
  27.                
  28.                
  29.         }
复制代码



作者: 梁小刀11    时间: 2015-1-19 23:14
public class test4 {
public static void main(String[] args) {
        while(true){
        Scanner s=new Scanner(System.in);
        String str=s.next();
        if(str.equals("over")){
                break;
        }
        System.out.println(str.toUpperCase());
        }
}
}
//这样好像就的了,不过是eclipse中.
作者: bowen-xiao    时间: 2015-1-20 08:23
梁小刀11 发表于 2015-1-19 23:14
public class test4 {
public static void main(String[] args) {
        while(true){

这样写也是一样的,Scanner 是java.util包下的,也就是说它是一个工具类,取自该流的字节通过底层平台的默认字符集转换成字符。
作者: Lscreat    时间: 2015-1-20 10:14
感觉好厉害= =,不过为啥要将System.in 强转呢?
作者: bowen-xiao    时间: 2015-1-20 10:29
Lscreat 发表于 2015-1-20 10:14
感觉好厉害= =,不过为啥要将System.in 强转呢?

是不须要强转的,这里类型是一样的说明一下,开始编译器报了个错,clean了也不行,所以就转了一下。




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