我创建了一个用作 Rest Web 服务器的 java 程序。它获取 http 请求并发送响应。我在我的服务器中收到作为输入流的 http 请求。我想将此输入流转换为字符串,然后根据一些预定义的模式解析字符串。问题是当我获取输入流并尝试将其转换为字符串时,它不会完成操作,直到新请求到来或原始请求终止。如果仅发生这两个事件中的任何一个,则输入流成功转换为字符串,否则它只会被卡在那里。我错过了什么吗?任何建议都会非常有帮助。
ServerSocket service = new ServerSocket(Integer.parseInt(argv[0]));
Socket connection = service.accept();
InputStream is = connection.getInputStream();
String ss = IOUtils.toString(is);
System.out.println("PRINT : "+ss);
现在 ss 仅在旧请求终止或新请求在套接字上被接受时才打印。我想在同一请求中将其转换为字符串。
请告诉我我做错了什么?
谢谢, 塔拉·辛格
最佳答案
您应该分步阅读请求。首先逐行阅读标题。然后,如果是 POST
请求,就会有一个请求体。如果是这种情况,您之前应该已经阅读过 Content-Length
header ,它说明正文的长度(以字节为单位)。您应该从输入流中读取该字节数。
如果您将此应用制作为 servlet,或者如果这不可能,则使用 HTTP 服务器库,其中大部分已经为您处理。
关于java - 将 InputStream 转换为 String 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3910266/