1

在一个循环中,此代码运行(服务器端):

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如果客户端不发送任何内容,输入是否应该为空并回退到阻塞?

我究竟做错了什么?

process注意:while循环永远持续下去,因为输入没有尽头,我可以通过将变量限制为100个字符来看到问号。

4

1 回答 1

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方法InputStreamReader没有重载。

于 2013-10-05T14:43:23.483 回答