Java - Преобразование продолжающегося InputStream в строку без ожидания закрытия - PullRequest
1 голос
/ 12 сентября 2011

Итак, проблема в том, что у меня есть gzipped соединение с удаленным http-сервером потоковой передачи, который выбрасывает данные с высокой скоростью, и я хочу обработать каждую строку данных.

Соединение устанавливается через Apache ContentEncodingHttpClient, который подключается правильно, и я извлекаю InputStream через:

InputStream is = response.getEntity().getContent();

Это работает правильно. Теперь я хочу обработать его, моя функция, кажется, ожидает окончания потока, чего он никогда не делает.

final String result = convertStreamToString(is, "UTF-8");
                    new Thread(){
                        public void run(){
                                r.gotResponse(result);
                        }
                    }.start();

Функция преобразования в строку:

    public String convertStreamToString( InputStream is, String ecoding ) throws IOException
    {
        StringBuilder sb = new StringBuilder( Math.max( 16, is.available() ) );
        char[] tmp = new char[ 4096 ];

        try {
           InputStreamReader reader = new InputStreamReader( is, ecoding );
           for( int cnt; ( cnt = reader.read( tmp ) ) > 0; )
                sb.append( tmp, 0, cnt );
        } finally {
            is.close();
        }
        return sb.toString();
    }

Может ли кто-нибудь указать мне правильное направление для обработки контента по мере поступления?

EDIT

Я только что заставил его работать, который обрабатывает каждую строку вместо добавления каждой.

BufferedReader in = new BufferedReader(new InputStreamReader(is));
return in.readLine();
enter code here

1 Ответ

1 голос
/ 12 сентября 2011

Если вы хотите обработать каждую строку данных, то вы не можете обернуть InputStream в InputStreamReader и обернуть его в BufferedReader?

BufferedReader предоставляет метод readLine(), который можно использовать для чтения строк из потока.

...