System.in.read()长度多2问题

标准输入流会返回读取字节的长度,我们发现得出的数据会比实际输入的数据个数多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();
     }
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值