Text-to-Prototype与D2C:AI生成可交互原型的完整技术拆解
2026/10/20 15:10:12
在Java 11中,HTTP Client API引入了一种通过流处理HTTP响应体的方法。这种方式可以让你高效地处理大体积数据,而无需一次性将整个响应体加载到内存中。通过这种方式,你可以像处理文件一样逐行读取HTTP响应体。
假设你想要处理《双城记》(A Tale of Two Cities)这本书的文本,书本内容可以通过 古腾堡计划 在线获取。我们需要从中去掉头部和尾部信息,只提取正文部分。
以下是从 HTTP 源获取文本并创建流的完整示例:
// URI 指向文件地址URIuri=URI.create("https://www.gutenberg.org/files/98/98-0.txt");// 创建 HTTP 请求HttpClientclient=HttpClient.newHttpClient();HttpRequestrequest=HttpRequest.newBuilder(uri).build();// 发送请求并获取响应体作为行流(Stream<String>)HttpResponse<Stream<String>>response=client.send(request,HttpResponse.BodyHandlers.ofLines());List<String>lines;try(Stream<String>stream=response.body()){lines=stream.dropWhile(line->!line.equals("A TALE OF TWO CITIES"))// 跳过头部信息.takeWhile(line->!line.equals("*** END OF THE PROJECT GUTENBERG EBOOK A TALE OF TWO CITIES ***"))// 跳过尾部信息.collect(Collectors.toList());// 将正文部分收集到列表中}System.out.println("# lines = "+lines.size());// 输出处理后的行数🧾输出结果:
# lines=15904URI和HTTP请求:首先,我们使用URI.create()方法创建指向文件的 URI,然后用HttpClient.newHttpClient()创建 HTTP 客户端,并构建一个HTTP请求。client.send(request, HttpResponse.BodyHandlers.ofLines())发送请求,并通过BodyHandlers.ofLines()方法获取 HTTP 响应体的行流。这种方式返回的是Stream<String>,意味着你可以像处理普通的文本文件一样处理响应体。dropWhile():跳过文件中直到找到《双城记》标题的部分,排除掉头部信息。takeWhile():继续获取直到找到结尾的标记为止,排除掉尾部信息。collect(Collectors.toList()):将结果收集到列表中(在这个示例中,我们将正文的每一行保存为列表项)。Stream,响应体的内容是逐行处理的,这样可以避免将整个文本加载到内存中,对于处理大文件非常有利。这种从 HTTP 响应体创建流的方式非常适用于以下场景:
HttpResponse.BodyHandlers.ofLines(),我们可以创建一个逐行处理响应体的流。