Kā es varu nolasīt / konvertēt InputStream par virkni Java valodā?

Ja jums ir java.io.InputStream objekts, kā apstrādāt šo objektu un izveidot stringu?


Pieņemsim, ka man ir InputStream, kas satur teksta datus, un es gribu tos pārvērst String, lai, piemēram, tos varētu ierakstīt žurnāla failā.

Kāds ir vienkāršākais veids, kā ņemt InputStream un pārvērst to string?

public String convertStreamToString(InputStream is) {
    // ???
}
Risinājums

Labs veids, kā to izdarīt, ir, izmantojot Apache commons IOUtils, lai kopētu InputStream uz StringWriter... kaut ko līdzīgu.

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

vai pat

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

Kā alternatīvu var izmantot ByteArrayOutputStream, ja nevēlaties sajaukt plūsmas un rakstītājus.

Komentāri (15)

Apache Commons ļauj:

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

Protams, bez UTF-8 var izvēlēties arī citas rakstzīmju kodēšanas.

Skatiet arī: (dokumentācija)

Komentāri (9)

Ņemot vērā failu, vispirms jāiegūst java.io.Reader instance. Pēc tam to var nolasīt un pievienot StringBuilder (mums nav nepieciešams StringBuffer, ja mēs tam nepieejam vairākos pavedienos, un StringBuilder ir ātrāks). Triks ir tajā, ka mēs strādājam blokos, un tāpēc mums nav vajadzīgas citas buferēšanas plūsmas. Bloka lielums tiek parametrizēts, lai optimizētu veiktspēju darbības laikā.

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();
}
Komentāri (12)