从socket读取Java

时间:2013-10-05 11:18:55

标签: java sockets inputstream stringbuffer

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

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个字符的限制来查看问号。

1 个答案:

答案 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}}方法未超载。