Строка Java из InputStream [duplicate]

14
задан Community 23 May 2017 в 10:29
поделиться

6 ответов

Вот модификация ответа Gopi, которая не имеет проблемы с окончанием строки, а также более эффективна, поскольку не требует временных объектов String для каждой строки и позволяет избежать избыточного копирования в BufferedReader и дополнительной работы в readLine ( ).

public static 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();
}
9
ответ дан 1 December 2019 в 12:12
поделиться

Вы также можете использовать библиотеку ввода-вывода Apache Commons

В частности, вы можете использовать метод IOUtils # toString (InputStream inputStream)

4
ответ дан 1 December 2019 в 12:12
поделиться

Оберните поток в средство чтения, чтобы получить преобразование языкового стандарта, а затем продолжайте чтение, собирая данные в StringBuffer. Когда закончите, выполните toString () в StringBuffer.

1
ответ дан 1 December 2019 в 12:12
поделиться

Вам необходимо создать InputStreamReader , чтобы обернуть входной поток, преобразовывая двоичные данные в текст. Укажите соответствующую кодировку в зависимости от вашего источника входного сигнала.

Получив InputStreamReader , вы можете создать BufferedReader и читать содержимое построчно или просто читать буфер за буфером и добавлять его к StringBuilder , пока вызов read () не вернет -1.

Библиотека Guava составляет вторую часть этого простого в использовании CharStreams.toString (inputStreamReader) .

6
ответ дан 1 December 2019 в 12:12
поделиться

Вот пример кода, адаптированный из здесь .

public  String convertStreamToString(InputStream is) throws IOException {
        /*
         * To convert the InputStream to String we use the BufferedReader.readLine()
         * method. We iterate until the BufferedReader return null which means
         * there's no more data to read. Each line will appended to a StringBuilder
         * and returned as String.
         */
        if (is != null) {
            StringBuilder sb = new StringBuilder();
            String line;

            try {
               BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                while ((line = reader.readLine()) != null) {
                    sb.append(line).append("\n");
                }
            } finally {
                is.close();
            }
            return sb.toString();
        } else {       
            return "";
        }
    }
3
ответ дан 1 December 2019 в 12:12
поделиться

Вы также можете использовать StringWriter следующим образом; каждое чтение из вашего InputStream сопоставляется с записью (или append ) в StringWriter, и по завершении вы можете вызвать getBuffer , чтобы получить StringBuffer, который можно использовать напрямую, или вызвать его метод toString .

1
ответ дан 1 December 2019 в 12:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: