在Java开发中,某些场景我们可能要将InputSteam与String互相转化。
InputStream转化为String
使用 InputStreamReader 和 StringBuilder`(JDK)
1 | public class InputStream2String { |
使用 inputStream.read() 和 StringBuilder
1 | StringBuilder sb = new StringBuilder(); |
使用 ByteArrayOutputStream 和 inputStream.read
1 | ByteArrayOutputStream result = new ByteArrayOutputStream(); |
使用 BufferedInputStream 和 ByteArrayOutputStream
1 | BufferedInputStream bis = new BufferedInputStream(inputStream); |
使用 BufferedReader
1 | String newLine = System.getProperty("line.separator"); |
使用 Stream API 或 parallel Stream API
1 | String myString = new BufferedReader(new InputStreamReader(inputStream)).lines().collect(Collectors.joining("\n")); |
或
1 | String myString = new BufferedReader(new InputStreamReader(inputStream)).lines().parallel().collect(Collectors.joining("\n")); |
使用 StringWriter 和 IOUtils.copy (Apache Commons)
1 | StringWriter writer = new StringWriter(); |
甚至可以直接这样用
1 | String result = IOUtils.toString(inputStream, StandardCharsets.UTF_8); |
使用 CharStreams (Google Guava)
1 | String result = CharStreams.toString(new InputStreamReader(inputStream, Charsets.UTF_8)); |
分别按照字符串长度来进行测试。
当使用的是一个小字符串(length=175),得到的性能测试结果如下:
当使用的是一个长字符串(length=50100),得到的性能测试结果如下:
为了更加直观,按照字符串的长度与相应函数消耗的平均时间,做了如下的表格:
更加直观的表格图,如下:
JDK原生提供
1 | byte[] bytes = new byte[0]; |
String转化为InputStream
JDK原生提供
1 | InputStream is = new ByteArrayInputStream(str.getBytes()); |
Apache Common提供
1 | InputStream targetStream = IOUtils.toInputStream(str, StandardCharsets.UTF_8.name()); |
Google Guava提供
1 | InputStream targetStream = |