关于Java中Enter的疑问
书中,在Java的标准输入输出流这一节中的一个例子后面说到:Java语言把Enter键当作两个字符"\r"和"\n",其在ASCII码中的值分别是13和10.
《Java程序设计基础(第6版)——陈国君》清华大学出版社 P186第5行
这是前面所说的例子是:P185【例10.4】
但是本人在将代码输入IDEA并运行时发现与书本不一致:
- 先是和书上一样的代码:
import java.io.*;
public class app10_4 {
public static void main(String[] args)
{
try {
byte [] b = new byte[128]; //设置缓冲区
System.out.print("请输入字符:");
int count =System.in.read(b);
System.out.println("输入的是:");
for (int i = 0 ; i < count ; i++)
System.out.print(b[i]+" ");
System.out.println();
for (int i = 0 ; i < count-2; i++)
System.out.print((char) b[i]+" ");
System.out.println();
System.out.println("输入的字符个数是:"+count);
Class InClass = System.in.getClass();
Class OutClass = System.out.getClass();
System.out.println("in所在的类是"+InClass.toString());
System.out.println("out所在的类是"+OutClass.toString());
}
catch (IOException e){}
}
}
运行结果是:
请输入字符:abc
输入的是:
97 98 99 10
a b
输入的字符个数是:4
in所在的类是class java.io.BufferedInputStream
out所在的类是class java.io.PrintStream
-
本人在第14行的for循环语句中进行改动:
将
for (int i = 0 ; i < count-2; i++)
改为
for (int i = 0 ; i < count-1; i++)
-
改后再次运行发现运行结果是:
请输入字符:abc
输入的是:
97 98 99 10
a b c
输入的字符个数是:4
in所在的类是class java.io.BufferedInputStream
out所在的类是class java.io.PrintStream
- debug结果如下图:
可见在该程序中只读取了Enter键的"\n",ASCII码为10,而没有读到"\r"
但是在另一个程序中
该程序利用FileReader类读取文本内容。
import java.io.*;
public class app10_5 {
public static void main(String[] args)
{
try(FileReader fr = new FileReader("D:/study/code/IOtest/Myfile.txt");)
{
char [] c =new char[13];
int num =fr.read(c);//this read methods return the number of characters read
String str = new String(c,0,num);
System.out.println("文本中的字符有"+num+"个");
System.out.println("文本中的内容是:"+str);
}
catch (FileNotFoundException e)
{
System.out.println("file not found");
}
catch (IOException e)
{
System.out.println("IOException");
}
}
}
当在文本中输入helloworld加Enter键时,输出结果为:
文本中的字符有12个
文本中的内容是:helloworld
debug结果如下图:
对比分析发现:前一个程序用的标准输入输出类System.in、System.out是InputStream、OutputStream的子类,属于字节流。而后一个程序用的FileReader间接继承自Reader类,属于字符流。
可能是当用字节流处理文本文件时,会出现各种各样的问题,所以Java建议在处理文本文件时使用字符流。
本人学识浅薄,查觉无人说此疑问,郁闷不解。
望各位指出其中真正正确的道理,感谢。