非负值与-1的不良比较

时间:2015-02-23 06:53:09

标签: java findbugs inputstreamreader

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” < / b>

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

提前致谢

3 个答案:

答案 0 :(得分:3)

Java中的

char是一个16位的Unicode字符,范围从0到65,535。它永远不会消极。

作为一项有趣的练习,请检查这些内容:

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

找出原因。

答案 1 :(得分:2)

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

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

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

答案 2 :(得分: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());