为什么网络输入流不能多次工作?

时间:2015-10-28 07:31:53

标签: java network-programming inputstream

网络输入流在下面代码的版本1中正常工作,因为它继续从服务器接收数据消息。 但是,在版本2中,只收到第一条消息,然后没有。

为什么它不起作用?还有其他选择吗?

版本1

 public void run(){
    try {
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        int c;
        while ((c = in.read()) != -1) {
            System.out.print((char) c);
        }
     }catch (IOException e){
          e.printStackTrace();
      }
}

第2版

 public void run(){
    try {
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        while(true){
                String msg = in.readLine();
                System.out.println(msg);
            }
     }catch (IOException e){
          e.printStackTrace();
      }
}

1 个答案:

答案 0 :(得分:0)

您的第二个版本无效,因为您没有检查流的结尾。 readLine()此时返回null。它应该是:

while ((line = in.readLine()) != null)
{
    // ...
}

...它只会在读取一行时返回一行,包括行终止符。如果你不发送行,则无法读取行。