标准输入流会返回读取字节的长度,我们发现得出的数据会比实际输入的数据个数多2,但当我们输出数据的时候,多出的两个字节是不会显示的,由于我们不知道多出的两个字节的位置,这给我们直接处理输入的字节增加了难度。
我们在输出字节数组时做些手脚来看看多出的字节的位置,用System.out.println("*" +test[i]+ "*"); 这样我们可以看出那两个字节在末尾,接下来我们就要查明这两个字节的真实身份。
我们可以在输出时再做一些手脚,比如用System.out.println("*" +(int)test[i]+ "*");这里输出的是输入的字节对应的Unicode码,通过查找Unicode码表我们就可以得知多出的字节储存的内容,而无需考虑存储的内容是否是可见的或可打印的。
PS:Unicode的0~127编码方法与传统的ASCII码相同
通过上述方法我们可以看到末尾的两个字节是13 10,由于手头没有Unicode码表,我就找了一个ASCII码表,得知这两个字节是回车符和换行符。
回车符是我们在输入结束确认时输入的,而换行符应该是与回车符连带产生的,具体原因应该参考MS-DOS (WINDOWS Platform)和JVM (WINDOWS Platform)相关文档。
相关代码:
/**
*Name:TestRead.java
*@author Richard
*@date 29/04/2006
*@version 1.0.0.0
*/
import java.io.*;
public class TestRead{
public static void main(String args[]) throws IOException{
byte test[] = new byte[512];
int len = System.in.read(test);
System.out.println("Len: " +len);
System.out.println("byte");
for(int i=0; i<10; i++)
System.out.print("*" +(byte)test[i]);
System.out.println();
System.out.println("char");
for(int i=0; i<10; i++)
System.out.print("*" +(char)test[i]);
System.out.println();
System.out.println("int");
for(int i=0; i<10; i++)
System.out.print("*" +(int)test[i]);
System.out.println();
}
}