java.io.InputStream.read()如何工作?

时间:2015-08-17 18:54:37

标签: java syntax io

为什么这样:

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转换为字符以使代码正确?

3 个答案:

答案 0 :(得分:1)

read() method返回int,它存储从流中读取的下一个字节。您需要将其转换为char,否则将打印int值。

如果您键入" ABCD",然后不进行强制转换,则调用println(int) methodSystem.outPrintStream),并且字节值为打印。

  B   D
  vv  vv
65666768
^^  ^^
A   C

如果你把它转换为char,那么调用一个不同的重载方法println(char),它知道要打印指定的字符,所以"工作" (回复你输入的字符)。

答案 1 :(得分:0)

read()方法returns an integer,如果已到达流的末尾,则返回-1。

char或字符是primitive type,可以表示为数字。由于您将整数转换为字符,因此它会在屏幕上显示。

答案 2 :(得分:0)

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