java - 将 InputStream 转换为 String 的问题

标签 java inputstream

我创建了一个用作 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/

相关文章:

Java Hibernate 无法连接 MySQL 数据库

java - 直接从 Java 中的 REST API 响应流将大型 JSON 保存为文本

java - 读取字节流并写入文件

java - Java 中 null(Input/Output)Stream API 的用例是什么?

java - UTF-8 读取文件在 ide 外部时解析方式不同

java - Axis over SSL 和使用 PKCS#12 keystore 的双向身份验证

Java:从 InputStream 读取并不总是读取相同数量的数据

java - 套接字文件传输 : Receiver stuck in reading from buffer/writing to storage

java - 使用 HashSet 而不是 ArrayList 来传达意图?

java - 如何在正则表达式中进行模式匹配?