2

我一直在使用 Java 中的各种 HTTP 客户端从网站获取各种信息或使用网络服务(如谷歌地图地理编码器)

我正在使用的当前客户端是来自 Apache的HTTP 组件客户端。

我一直想知道为什么没有 .getText() 或 .getBytes() 方法可以简单地为我提供 url 的所有内容,而是有返回 InputStream 的方法。这样做的意义或原因是什么?

这不像我不断与服务器通信,所以我必须不断检查流。HTTP 是无状态的,那么为什么没有 getText()/getBytes() 方法在收到 HTTP 响应后简单地返回其内容(作为 String 或 byte[])?

4

4 回答 4

6

因为服务器开始以流的形式输出结果,而客户端以这种方式获取结果。您可以在内存中缓冲该流并将其转换为String/ byte[],但您也可以处理其中的一部分,然后丢弃它们。

于 2011-05-07T16:33:22.800 回答
2

因为它是一个网络;因为它是一个流;因为服务器响应可以任意大。同样的推理也适用于文件。

于 2011-05-07T22:01:23.563 回答
1

除了已经提到的,输入流对于以下场景是必需的:HTTP 服务器向运行在 -Xmx512M 的 JVM 中的客户端提供 1 GB 响应。getBytes()或者getString()只能导致OutOfMemoryError, 同时读取输入流(一次 1K)非常有意义。

于 2011-05-07T22:11:57.850 回答
1

你有EntityUtils.toString(entity)

于 2011-05-08T16:47:19.420 回答