2

FindBugs 报告我正在将以下代码的非负值与 -1 进行比较。

/* I get inputstreamreader from a org.apache.commons.net.telnet.TelnetClient object */

InputStreamReader reader = telnet.getInputStream();

char msg = 0;
StringBuilder temp = new StringBuilder();
while((msg = (char)reader.read()) != -1){
  temp.append(msg);
} 
System.out.println("Read Message = "+temp.toString());

但是当我通读InputStreamReader.read()文档时,它说“返回:读取的字符数,如果已到达流的末尾,则为 -1”

我在这里做错了什么..?

提前致谢

4

3 回答 3

3

char在 Java 中是一个 16 位 Unicode 字符,范围从 0 到 65,535。它永远不会是负面的。

作为一个有趣的练习,检查打印的内容:

System.out.println(">>>>>>> TEST: " + (int)((char) -1));

并找出原因。

于 2015-02-23T08:24:11.120 回答
2

读者返回int,可能是负数。但是您将值转换为char,这是非负数。

顺便说一句,此方法不返回读取的字符数,而是一个字符:

返回:读取的字符,为 0 到 65535 (0x00-0xffff) 范围内的整数,如果已到达流的末尾,则为 -1 ( http://docs.oracle.com/javase/7/docs/ api/java/io/Reader.html#read%28%29 )

于 2015-02-23T06:58:20.733 回答
1

while 循环将 char 与负整数进行比较。这应该有效:

InputStreamReader reader = telnet.getInputStream();

int data = 0;
StringBuilder temp = new StringBuilder();
while((data = reader.read()) != -1){
    char msg = (char) data;
    temp.append(msg);
} 
System.out.println("Read Message = "+temp.toString());
于 2015-02-23T08:18:48.253 回答