java高手进来帮我解释下这个count为什么总是比输入数组长度大2

来源:百度知道 编辑:UC知道 时间:2024/06/17 14:52:05
import java.io.IOException;
class Hello
{
public static void main(String [] args)
{
int count;
byte[] buf=new byte[25];
System.out.print("请输入你的名字:");
try
{
count=System.in.read(buf);
System.out.println(count);
String name=new String(buf,0,count-2);
System.out.print("你好!"+name);

}
catch(IOException e)
{
System.out.println(e);
}
}
}

能解释下吗,如果是默认,这样的默认有什么意义,依据是什么?

开始我想到也是回车,但是回车只占一个字符长度,所以简化了代码

测试了下:

public static void main(String[] args) {
int count;
byte[] buf = new byte[10];
System.out.print("请输入你的名字:");
try {
count = System.in.read(buf);
for(int i = 0;i < buf.length;i++){
System.out.println("|"+buf[i]+"|");
}
System.out.println(count);

} catch (IOException e) {
System.out.println(e);
}
}

运行效果如下:
请输入你的名字:1
|49|
|13|
|10|
|0|
|0|
|0|
|0|
|0|
|0|
|0|
3

buf的第一个元素打印为49,而后面两个元素都是13,10

对应ASCII 字符表:
49 表示字符1
13 表示回车
10 表示换行

难道是java自己把13和10加上去的,但是如果我输入整个buf的长度的字符会这么样呢,于是继续测试:

请输入你的名字:1111111111
|49|
|49|
|49|
|49|
|49|
|49|
|49|
|49|
|49|
|49|
10

可以看到没有了13和10了
在后面的测试中,得出只要输入的长度小于buf的长度,buf里面就会依