public class ReadLine {

public static void main(String[] args) {
// TODO Auto-generated method stub
byte buf[] = new byte[1024];
String strInfo = null;
int pos = 0;
int ch = 0;
System.out.println("enter info,input bye for exit:");
while (true) {
try {
ch = System.in.read();
} catch (Exception e) {
System.out.println(e.getMessage());
}
switch (ch) {
case '\r':
break;
case '\n':
strInfo = new String(buf, 0, pos);
if ("bye".equalsIgnoreCase(strInfo))
return;
else
System.out.println(strInfo);
pos = 0;
break;
default:
buf[pos++] = (byte) ch;
}
}
}}

解决方案 »

  1.   

    这是Java的IO流问题, 你可以这样来理解你的程序:调用System.in.read();的时候, 由于输入流并没有数据可以读取, 所以read()方法将会阻塞. 这时候控制台在等待你的输入, 而你的输入是以回车键来提交的.当你按下回车键的时候, 也就激活了刚才阻塞的read()方法, 从现在开始, read()方法将一次一个字节地从输入流中读取数据, 每读取一个字节, 你程序中的switch case语句就会判断执行一次, 遇到\n就打印输出这一行, 然后通过break跳出switch, 继续下一次循环.这时候, 由于输入流中已无数据可读取, read()方法将再次阻塞, 而等待你的输入.
    如有错误之处, 欢迎大家指出讨论...