日期:2014-05-20  浏览次数:20788 次

发现一个奇怪的JAVA程序,请帮忙看看
//虽然我会用JAVA,但是底层的东西仍然是菜鸟。见笑了
我写了一个测试terminalIO的class代码如下:
package cn.cairuzhang.test;

import java.io.IOException;

public class terminalIO {
      public static void main(String[] args)throws IOException{
       int i;
       while((i = System.in.read())!= -1){
       i = Character.toLowerCase((char)i);
       System.out.write(i);
       }
       }
      }


上面的运行是正确的。但是当我加入下面的语句
package cn.cairuzhang.test;

import java.io.IOException;

public class terminalIO {
      public static void main(String[] args)throws IOException{
       int i;
       while((i = System.in.read())!= -1){
       i = Character.toLowerCase((char)i);
       System.out.write(i);
       System.out.write(i);
       }
       }
      }


结果就出现了一点奇特的地方::
U
uu


I
ii


//每次输出都带两个空行?!
然后我继续修改代码如下:
package cn.cairuzhang.test;

import java.io.IOException;

public class terminalIO {
      public static void main(String[] args)throws IOException{
       int i;
       while((i = System.in.read())!= -1){
       i = Character.toLowerCase((char)i);
       System.out.write(i);
       System.out.print("test");
       }
       }
      }


结果shi:
MAYBE
mtestatestytestbtestetest
test
test
//依然多出两行,不过即使是print而不是println,仍然会过行……
我有点疑惑其中的原因,所以发帖问问大家。不过也许是非常浅显的知识,我是菜鸟,请见谅、谢谢啦
java

------解决方案--------------------
System.out.write是字节流,System.out.println一个是字符流
http://blog.sina.com.cn/s/blog_6abf2a620100sfqd.html
------解决方案--------------------
首先你这个程序无法正常结束,read停止输入是当输入为-1,这个如何才能满足?
执行时,按回车键导致输出(直到出现换行符时,才将打印缓冲中的内容打印出来),而回车键是2个字符:回车、换行
所以,两个write,就出现2个空行,因为输出了2个换行符