Чтение InputStream - PullRequest
       5

Чтение InputStream

0 голосов
/ 17 октября 2011

Спокойной ночи в моем часовом поясе.

Я создаю http-бота, и когда я получаю ответ от сервера, я хочу сделать две вещи. Во-первых, это напечатать тело ответа и потому что я знаю, что тело ответа имеет тип TEXT / HTML вторая вещь, которую я делаю, - это анализ ответа через анализатор html (в данном конкретном случае NekoHtml). Фрагмент кода:

    //Print the first call
    printResponse(urlConnection.getInputStream());
    document = new InputSource(urlConnection.getInputStream());
    parser.setDocument(document);

Проблема в том, что когда я запускаю первую строку (printResponse), вторая строка выдаст исключение. Теперь вопросы-> Это происходит потому, что InputStream может быть прочитан только один раз - каждый раз, когда мы читаем из входного потока, байты очищаются? Как мы можем прочитать больше, чем один раз контент из входного потока?

Заранее спасибо

С наилучшими пожеланиями

Ответы [ 3 ]

5 голосов
/ 17 октября 2011

В дополнение к тому, что сказал Тед Хопп , взгляните на библиотеку Apache Commons IO .Вы найдете:

  • IOUtils.toString(urlConnection.getInputStream(), "UTF-8") служебный метод, который принимает входной поток, полностью читает его и возвращает строку в заданной кодировке

  • TeeInputStream - это декоратор InputStream, который скопирует каждый прочитанный байт и скопирует его в заданный выходной поток.

Должно работать:

 InputStream is = new TeeInputStream(urlConnection.getInputStream(), System.out);
0 голосов
/ 17 октября 2011

Как сказал Тед Хопп:

    byte [] bytes = new byte[urlConnection.getInputStream().available()];
    printResponse(new ByteArrayInputStream(bytes));
    document = new InputSource(new ByteArrayInputStream(bytes));
    parser.setDocument(document);
0 голосов
/ 17 октября 2011

Считать ответ с сервера в байтовый массив. Затем вы можете создать ByteArrayInputStream для многократного чтения байтов.

...