含有文本数据的InputStream输入流,有时候需要将其转换成字符串(String),那怎么办呢?
下面介绍七种方式:
1.使用ByteArrayOutputStream和inputStream.read(JDK)
ByteArrayOutputStream result = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
for (int l; (l = ins.read(buffer)) != -1; ) {
result.write(buffer, 0, l);
}
return result.toString("UTF-8");
2.使用google Guava
String result = CharStreams.toString(
new InputStreamReader(ins, Charsets.UTF_8));
3.使用Apache Utils(Apache commons-io)
String result = IOUtils.toString(ins, StandardCharsets.UTF_8);
return result;
4.使用Scanner(JDK)
Scanner scanner = new Scanner(ins).useDelimiter("\\A");
String result = scanner.hasNext() ? scanner.next() : "";
5.使用InputStreamReader和StringBuilder(JDK)
char[] buffer = new char[1024];
StringBuilder append = new StringBuilder();
Reader reader = new InputStreamReader(ins, Charsets.UTF_8);
for (int l ; (l = reader.read(buffer, 0, buffer.length)) > 0;) {
append.append(buffer, 0, l);
}
return append.toString();
6.使用StringWriter和IOUtils.copy(Apache commons-io)
StringWriter writer = new StringWriter();
IOUtils.copy(ins, writer, Charsets.UTF_8);
return writer.toString();
7.使用BufferedInputStream和ByteArrayOutputStream(JDK)
BufferedInputStream bis = new BufferedInputStream(ins);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
for (int result = bis.read() ; result != -1 ; result = bis.read()) {
baos.write((byte)result);
}
String strs = baos.toString("UTF-8");