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>
我在这里做错了什么..?
提前致谢
答案 0 :(得分:3)
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());