您的位置:首页 > 其它

system.in.read()用法

2016-08-18 18:43 381 查看
                          System.read.in的用法

1.      功能:用于从键盘读取一个字符,返回字符的Unicode码。

2.      实例:

public class Sort {

      public static void main(String[] args) throwsIOException {

          System.out.println("算法");

          //byte[] b=new byte[30];

          for(int j=0;j<30;j++){

              int i=System.in.read();

              System.out.println("your iis:"+i+"   "+j);

         }

      }

   }

输出结果:

算法



your i is:231   0

your i is:187   1

your i is:143   2

your i is:10   3

1

your i is:49   4

your i is:10   5

2

your i is:50   6

your i is:10   7

a

your i is:97   8

your i is:10   9

b

your i is:98   10

your i is:10   11

结果分析:

1.      当输入1、2的时候返回System.in.read()返回49、50,输入a、b的时候返回97、98。49、50是1、2的Unicode码值,97、98是a、b的Unicode码值。与它们的ASCLL码值相同。

2.      我们发现每输入一个字符,结果都会输出一个结果10,这是因为System.in.read()将键盘的所有点击均作为输入,当我们输完1、2、a、b之后点击enter键确认输入时,System.in.read()也会将enter键当做输入值。而enter键的Unicode是10(\n换行符),所以每次的结果都会输出10。

3.      现在有个问题,当输入汉字“经”的时候,结果却输出3个数字,这是什么原因呢?System.in.read()返回一个输入字符的Unicode码,那么应该返回“经”的Unicode码0x7ECF,但这与结果不一样。上网查资料,发现System.in.read()方法首先将键盘输入放到一个缓冲区中,然后每次从缓冲区中读取一个字节,而不是把字符的所有字节都读取出来。但现在又有一个问题,如果System.in.read()是按字节一个一个来读取的,Unicode是按两个字节来编码的,为什么输入数字、字母时,实际只输出一个字节,而输入汉字时,实际输出三个字节。这是什么原因呢?原因是电脑才用了utf-8编码来实现Unicode编码。Unicode编码规范只是一个规范,给全世界每个字符定义一个独一无二的码值,但在电脑上的存储方式是不一样的,因为每个字符需要的字节长度不一样,如果给字符规定统一的长度,如均分配四个字节来存储,那么数字、字母等就会造成大量的内存浪费,因此想到根据字符的不同分配不同的字节数目,UTF-8就是基于这样的思想来编码的。在utf-8编码规则中,字母、数字用一个字节编码,中文汉字用三个字节编码,所以才会出现数字、字母时,实际只输出一个字节,而输入汉字时,实际输出三个字节的结果。

4.      汉字“经”的Unicode编码为0x7ECF,汉字的UTF-8编码规则是:1110xxxx 10xxxxxx 10xxxxxx,因此“经”的UTF-8码为1110011110111011 10001111,每个字节的十进制值为231 187 143,刚好与程序输出结果相同。

5.      System.in.read(byte[])方法,byte[k]可以存储缓冲区中的前k个字节,System.in.read(byte[])输出结果是字节的个数。如果输入字符的字节数目大于k,那么只会去前k个字节。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  system in read