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个字节。
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()用法
- System.in.read()的用法
- System.in.read()的用法
- System.in.read()的用法
- system.in.read()用法
- [Java 12 IO] InputStream inputStream = System.in; 的读操作 read() != -1
- Read Contacts information in Android system.
- 黑马程序员——System.in.read()初次尝试
- System.in.read()方法
- [Java 12 IO] InputStream inputStream = System.in; 的读操作 read() != -1
- System.Globalization.DateTimeFormatInfo.InvariantInfo用法
- 利用System.in.read() 函数从键盘读入一系列字符
- 关于System.in.read()
- System.in.read()的特殊地方
- System.in.read()的使用方法
- System.in中的read()方法
- System.in.read(); System.out.write();
- 关于System.in.read()
- System.in.read()长度多2问题
- System.in.read() 回车