Зачем нужен InputStream в HTTP-клиентах?(Джава) - PullRequest
2 голосов
/ 07 мая 2011

Я использую различные клиенты HTTP в java для получения различной информации с веб-сайтов или для использования веб-служб (например, геокодер карт Google)

Текущий клиент, с которым я работаю, - это клиент HTTP Components от Apache.

Мне всегда интересно, почему нет метода .getText () или .getBytes (), который просто дает мне все содержимое URL, но вместо этого есть методы, которые возвращают InputStream. В чем смысл или причина этого?

Не то чтобы я постоянно общался с сервером, чтобы мне приходилось постоянно проверять поток. HTTP не имеет состояния, поэтому почему нет метода getText () / getBytes (), который просто возвращает содержимое ответа HTTP (в виде String или byte []) после его получения?

Ответы [ 4 ]

6 голосов
/ 07 мая 2011

Поскольку сервер начинает выводить результат в потоке, а клиент получает его таким образом.Вы можете буферизовать этот поток в памяти и преобразовать его в String / byte[], но вы также можете обрабатывать его части и удалять их.

2 голосов
/ 08 мая 2011

Потому что это сеть; потому что это поток; потому что ответ сервера может быть сколь угодно большим. То же самое относится и к файлам.

1 голос
/ 08 мая 2011

У вас есть EntityUtils.toString (entity) .

1 голос
/ 08 мая 2011

Кроме того, что уже упоминалось, входной поток является обязательным для следующего сценария: HTTP-сервер, предоставляющий ответ размером 1 ГБ клиенту, работающему в JVM с -Xmx512M.getBytes() или getString() может привести только к OutOfMemoryError, тогда как чтение входного потока (1К за раз) имеет смысл.

...