2012-07-13 25 views
0

我目前正在通过Herbert Schildt编写的Java:The Complete Reference 8th Edition。我是最近的compsci毕业生和新手程序员。将InputStreamReader投射为(char)

在I/O章节中,本书提供了一小段示例代码(我将它包含在下面)。该代码创建一个BufferedReader,它以InputStreamReader(System.in)作为参数提供(第6行)。我检查了Java SE7 docs for InputStreamReader,它表示它“读取字节并将它们解码为字符[...]”。我的问题是,为什么在将示例代码的第9行中的br.read()指定为'c'时,需要(或者甚至有必要)将br.read()作为char?

非常感谢您的帮助。

杰米

1. import java.io.* 
2. 
3. class BRRead { 
4.  public static void main(String args[]) throws IOException { 
5.   char c; 
6.   BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
7.   System.out.println("Enter characters, 'q' to quit."); 
8.   do { 
9.     c = (char) br.read(); 
10.    System.out.println(c); 
11.   } while(c != 'q'); 
12.  } 
13. } 
+0

您是否阅读过'Reader.read()'方法的javadoc? – jtahlborn 2012-07-13 15:19:05

+0

我没有(但我现在),显然我应该有。 – Jamie 2012-07-13 16:04:02

回答

1

read()方法返回int类型的值。因此,铸造是必需的。

+0

非常感谢。 – Jamie 2012-07-13 16:04:23

1

您的.read()方法正在从BufferedReader类调​​用,并根据文档,您的br.read()将返回int。所以为了将该int转换为char,你需要将其转换为char。

http://docs.oracle.com/javase/6/docs/api/java/io/BufferedReader.html

public int read() 
     throws IOException 
Reads a single character. 
Overrides: 
read in class Reader 
Returns: 
The character read, as an integer in the range 0 to 65535 (0x00-0xffff), or -1 if the end of the stream has been reached 
Throws: 
IOException - If an I/O error occurs 
+0

我想感谢大家的意见。我现在肯定看到我应该阅读read()。感谢您与新手的耐心等待。 – Jamie 2012-07-13 16:03:41

0

的代码不正确。 'c'应该被声明为'int',所以将它与-1进行比较是有意义的。如果循环为-1,则该循环应该退出,否则在用作char时必须将其转换为字符。