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) {
// ???
}
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.
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)
Ņ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();
}