在循环中,此代码运行(服务器端):
try {
BufferedInputStream is = new BufferedInputStream(cnn.getInputStream());
InputStreamReader isr = new InputStreamReader(is);
int character;
StringBuffer process = new StringBuffer();
while ( (character = isr.read()) != 13) {
process.append( (char) character);
}
println("Input: " + process.toString());
} catch (Exception e) { }
客户端没有发送任何内容,但process.toString()
输出无限问号。
变量is
输出:java.io.InputStreamReader@510ebe18
(最后一个数字总是在变化)
如果客户端没有发送任何内容,输入是否应为空并且回退到catch
阻止?
我做错了什么?
注意:while循环会一直持续,因为输入没有结束,我能够通过向process
变量设置100个字符的限制来查看问号。
答案 0 :(得分:1)
?
标记可能是因为流源返回-1表示流的结束。但是while循环正在等待回车。
read
来电正在阻止并等待输入。只有当它检测到流的结尾或者在某些错误的情况下才会引发异常。
我认为你正在读行。使用BufferedReader
而不是逐字节读取它会很有效。
所以,如果您正在阅读标准输入。你可以这样做:
BufferedReader reader = new BufferedReader(
new InputStreamReader(new BufferedInputStream(System.in)));
try {
StringBuilder result = new StringBuilder();
for (String line = null; (line = reader.readLine()) != null;) {
result.append(line);
}
//process result
System.out.println(result);
} catch (IOException e){
e.printStackTrace();
}
toString
的{{1}}方法未超载。