Java InputStream 转换成 String

淡淡的烟草味﹌ 2023-02-14 10:23 52阅读 0赞

参考文章:Java InputStream 转换成 String

如下, 一共存在11种实现方式及其对应的性能测试结果:

1. 使用IOUtils.toString (Apache Utils)

  1. String result = IOUtils.toString(inputStream, StandardCharsets.UTF_8);

2. 使用CharStreams (guava)

  1. String result = CharStreams.toString(new InputStreamReader(inputStream, Charsets.UTF_8));

3. 使用Scanner (JDK)

  1. Scanner s = new Scanner(inputStream).useDelimiter("\\A");
  2. String result = s.hasNext() ? s.next() : "";

4. 使用Stream Api (Java 8). 提醒: 这种方式会将不同的换行符 (比如\r\n) 都替换为 \n.

  1. String result = new BufferedReader(new InputStreamReader(inputStream))
  2. .lines().collect(Collectors.joining("\n"));

5. 使用parallel Stream Api (Java 8). 提醒: 这种方式会将不同的换行符 (比如\r\n) 都替换为 \n.

  1. String result = new BufferedReader(new InputStreamReader(inputStream))
  2. .lines().parallel().collect(Collectors.joining("\n"));

6. 使用InputStreamReader 和StringBuilder (JDK)

  1. final int bufferSize = 1024;
  2. final char[] buffer = new char[bufferSize];
  3. final StringBuilder out = new StringBuilder();
  4. Reader in = new InputStreamReader(inputStream, "UTF-8");
  5. for (; ; ) {
  6. int rsz = in.read(buffer, 0, buffer.length);
  7. if (rsz < 0)
  8. break;
  9. out.append(buffer, 0, rsz);
  10. }
  11. return out.toString();

7. 使用StringWriter 和 IOUtils.copy (Apache Commons)

  1. StringWriter writer = new StringWriter();
  2. IOUtils.copy(inputStream, writer, "UTF-8");
  3. return writer.toString();

8. 使用ByteArrayOutputStream 和 inputStream.read (JDK)

  1. ByteArrayOutputStream result = new ByteArrayOutputStream();
  2. byte[] buffer = new byte[1024];
  3. int length;
  4. while ((length = inputStream.read(buffer)) != -1) {
  5. result.write(buffer, 0, length);
  6. }
  7. return result.toString("UTF-8");

9. 使用BufferedReader (JDK). 提醒: 这种方式会将不同的换行符 (比如\r\n) 都替换为当前系统的换行符(例如, 在windows下是”\r\n”).

  1. StringBuilder sbf = new StringBuilder();
  2. try (
  3. BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
  4. ) {
  5. String tempStr;
  6. while ((tempStr = reader.readLine()) != null) {
  7. sbf.append(tempStr);
  8. }
  9. reader.close();
  10. return sbf.toString();
  11. } catch (IOException e) {
  12. e.printStackTrace();
  13. }
  14. return sbf.toString();

10. 使用BufferedInputStream 和 ByteArrayOutputStream (JDK)

  1. BufferedInputStream bis = new BufferedInputStream(inputStream);
  2. ByteArrayOutputStream buf = new ByteArrayOutputStream();
  3. int result = bis.read();
  4. while(result != -1) {
  5. buf.write((byte) result);
  6. result = bis.read();
  7. }
  8. return buf.toString();

11. 使用 inputStream.read() 和 StringBuilder (JDK). 提醒: 这种方式处理Unicode时存在问题, 例如俄文, 仅在非Unicode字符串下工作正常.

  1. int ch;
  2. StringBuilder sb = new StringBuilder();
  3. while((ch = inputStream.read()) != -1)
  4. sb.append((char)ch);
  5. reset();
  6. return sb.toStrin

发表评论

表情:
评论列表 (有 0 条评论,52人围观)

还没有评论,来说两句吧...

相关阅读