Java'da bir InputStream'i bir String'e nasıl okuyabilirim / dönüştürebilirim?

Eğer bir java.io.InputStream nesneniz varsa, bu nesneyi nasıl işlemeli ve bir String üretmelisiniz?


Diyelim ki metin verileri içeren bir InputStreamim var ve bunu bir Stringe dönüştürmek istiyorum, böylece örneğin bunu bir günlük dosyasına yazabilirim.

InputStreami alıpString`e dönüştürmenin en kolay yolu nedir?

public String convertStreamToString(InputStream is) {
    // ???
}
Çözüm

Bunu yapmanın güzel bir yolu Apache commons IOUtils kullanarak InputStream'i bir StringWriter içine kopyalamaktır... gibi bir şey

StringWriter writer = new StringWriter();
IOUtils.copy(inputStream, writer, encoding);
String theString = writer.toString();

hatta

// NB: does not close inputStream, you'll have to use try-with-resources for that
String theString = IOUtils.toString(inputStream, encoding); 

Alternatif olarak, Akışlarınızı ve Yazarlarınızı karıştırmak istemiyorsanız ByteArrayOutputStream kullanabilirsiniz

Yorumlar (15)

Apache Commons izin verir:

String myString = IOUtils.toString(myInputStream, "UTF-8");

Elbette UTF-8 dışında başka karakter kodlamaları da seçebilirsiniz.

Ayrıca bak: (dokümantasyon)

Yorumlar (9)

Dosya dikkate alınarak önce bir java.io.Reader örneği alınmalıdır. Bu daha sonra okunabilir ve bir StringBuildera eklenebilir (birden fazla iş parçacığında erişmiyorsak StringBuffera ihtiyacımız yoktur ve StringBuilder daha hızlıdır). Buradaki püf noktası, bloklar halinde çalışmamız ve bu nedenle başka tamponlama akışlarına ihtiyaç duymamamızdır. Blok boyutu, çalışma zamanı performans optimizasyonu için parametrelendirilmiştir.

public static String slurp(final InputStream is, final int bufferSize) {
    final char[] buffer = new char[bufferSize];
    final StringBuilder out = new StringBuilder();
    try (Reader in = new InputStreamReader(is, "UTF-8")) {
        for (;;) {
            int rsz = in.read(buffer, 0, buffer.length);
            if (rsz < 0)
                break;
            out.append(buffer, 0, rsz);
        }
    }
    catch (UnsupportedEncodingException ex) {
        /* ... */
    }
    catch (IOException ex) {
        /* ... */
    }
    return out.toString();
}
Yorumlar (12)