Java 非负值与-1的比较不好

Java 非负值与-1的比较不好,java,findbugs,inputstreamreader,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.

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”

我做错了什么


提前感谢

读卡器返回
int
,可能是负数。但是您正在将值强制转换为非负的
char

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


返回:读取的字符,作为0到65535(0x00-0xffff)范围内的整数,或者-1(如果已到达流的结尾)()

while循环将字符与负整数进行比较。这应该起作用:

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());

Java中的
char
是单个16位Unicode字符,范围从0到65535。它永远不会是消极的

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

System.out.println(“>>>>测试:”+(int)((char)-1))


然后找出原因。

也许你应该标记有问题的语言。