BufferedReader.lines()。foreach()永远不会终止

时间:2014-04-02 08:42:09

标签: java java-io java-8 java-stream

我正在尝试从Bufferedreader读取HTTP请求,该请求获得Socket.getInputStream()作为输入。但是,当我使用Bufferedreader.lines().foreach()时,它永远不会终止而且它会被卡住。

我的代码(简化):

Socket socket = new ServerSocket(9090);
Socket newConnection = socket.accept();
BufferedReader reader = new BufferedReader(new InputStreamReader(newConnection.getInputStream()));
reader.lines().forEach(s -> System.out.println(s));

2 个答案:

答案 0 :(得分:4)

您需要阅读有关HTTP 1.1协议的更多信息。请求不会在流结束时终止。它们通过耗尽Content-length头中的字节数来终止,如果正在使用chunked传输模式,则终止累积块。如果他们在流的末尾用尽,你就永远无法发送回复。

答案 1 :(得分:-2)

尝试使用无参数构造函数创建套接字,并使用带有port和timeout参数的connect()方法。这样可以防止无休止的冻结。