java.io.InputStream.read() 是如何工作的?
How does java.io.InputStream.read() work?
为什么会这样:
import java.io.*;
class ioTest2 {
public static void main(String args[])throws IOException{
int b;
while( (b = System.in.read() ) != -1)
System.out.print((char)b);
}
}
按预期工作,即准确打印您键入的内容,并且:
import java.io.*;
class ioTest2 {
public static void main(String args[])throws IOException{
int b;
while( (b = System.in.read() ) != -1)
System.out.print(b);
}
}
不会吧?为什么我将 b
强制转换为字符以使代码正确?
read()
method returns int
存储从流中读取的下一个字节。您需要将其转换为 char
,否则将打印 int
值。
如果您键入 "ABCD",则不进行转换,然后调用 println(int)
method(System.out
是 PrintStream
),并打印字节的值.
B D
vv vv
65666768
^^ ^^
A C
如果你将它转换为 char
,那么会调用一个不同的重载方法 println(char)
,它知道打印指定的字符,所以它 "works"(回应你您输入的字符)。
read()
方法 returns an integer,如果已到达流末尾则为 -1。
一个char
,或字符,是一个primitive type,可以表示为一个数字。由于您将整数转换为字符,因此它会显示在屏幕上。
System.out.print((char)b)
从 System.out.print(b)
调用 不同的方法 。他们做不同的事情。
调用哪个方法不仅取决于名称,还取决于名称和类型签名(即,由参数的类型)。不同的方法可以有相同的名称,只要它们有不同的参数列表。
阅读 JavaDoc:
http://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html#print%28int%29
对
http://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html#print%28char%29
为什么会这样:
import java.io.*;
class ioTest2 {
public static void main(String args[])throws IOException{
int b;
while( (b = System.in.read() ) != -1)
System.out.print((char)b);
}
}
按预期工作,即准确打印您键入的内容,并且:
import java.io.*;
class ioTest2 {
public static void main(String args[])throws IOException{
int b;
while( (b = System.in.read() ) != -1)
System.out.print(b);
}
}
不会吧?为什么我将 b
强制转换为字符以使代码正确?
read()
method returns int
存储从流中读取的下一个字节。您需要将其转换为 char
,否则将打印 int
值。
如果您键入 "ABCD",则不进行转换,然后调用 println(int)
method(System.out
是 PrintStream
),并打印字节的值.
B D
vv vv
65666768
^^ ^^
A C
如果你将它转换为 char
,那么会调用一个不同的重载方法 println(char)
,它知道打印指定的字符,所以它 "works"(回应你您输入的字符)。
read()
方法 returns an integer,如果已到达流末尾则为 -1。
一个char
,或字符,是一个primitive type,可以表示为一个数字。由于您将整数转换为字符,因此它会显示在屏幕上。
System.out.print((char)b)
从 System.out.print(b)
调用 不同的方法 。他们做不同的事情。
调用哪个方法不仅取决于名称,还取决于名称和类型签名(即,由参数的类型)。不同的方法可以有相同的名称,只要它们有不同的参数列表。
阅读 JavaDoc:
http://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html#print%28int%29
对
http://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html#print%28char%29