Потоковая передача данных с помощью HttpURLConnection - PullRequest
3 голосов
/ 31 марта 2011

Я хочу использовать HttpURLConnection, чтобы открыть долгоживущее соединение с сервером через HTTP POST и обрабатывать потоковые данные по мере их поступления. Это для проекта Android.

Мне неясно, как это сделать с HttpURLConnection. В iOS NSURLConnection предоставляет асинхронный режим, в котором реализованный пользователем обратный вызов вызывается при поступлении новых данных и их доступности для анализа.

С помощью HttpURLConnection в Java я вижу, что есть метод available (), который возвращает количество байтов, которые можно прочитать. Но неясно, как я написал бы потоковое приложение, которое открывает соединение и реагирует, когда новые потоковые данные становятся доступными для анализа DataInputStream.

Буду признателен за некоторую информацию. Поддерживает ли HttpURLConnection или альтернативный класс в Java неблокирующую, асинхронную обработку HTTP-соединений?

Спасибо

Ответы [ 3 ]

5 голосов
/ 02 апреля 2011

Проведя дополнительные исследования, я подтвердил, что в Java нет встроенной поддержки асинхронного HTTP.Пакет под названием Jetty содержит HTTP-клиент со встроенным асинхронным HTTP и обратными вызовами.Доступно по адресу:

http://wiki.eclipse.org/Jetty/Tutorial/HttpClient

1 голос
/ 31 марта 2011

есть метод available (), который возвращает количество байтов, которое можно прочитать

Нет, нет.Существует метод available (), который возвращает количество байтов, которые можно прочитать без блокировки. Совсем не то же самое.

HttpURLConnection не очень подходит для этогозадача.HTTP - это протокол запрос-ответ, а не протокол потоковой передачи, по крайней мере, реализованный в классах Java.

1 голос
/ 31 марта 2011

Создайте объект, который расширяет Observable и реализует Runnable.Ваше основное приложение реализует Observer и добавляет себя к вашему новому объекту в качестве наблюдателя.

Запустите ваш объект в новом потоке.Он блокирует чтение на вашем HTTPUrlConneciton и уведомляет наблюдателей только что прочитанными данными.

...