个人随笔
目录
Java中InputStream和String之间的转换方法
2020-07-06 12:10:29

在Java中InputStream和String之间的转化十分普遍,本文主要是总结一下转换的各种方法,包括JDK原生提供的,还有一些外部依赖提供的。

1、InputStream转化为String

1.1 JDK原生提供

方法一:

  1. byte[] bytes = new byte[0];
  2. bytes = new byte[inputStream.available()];
  3. inputStream.read(bytes);
  4. String str = new String(bytes);

方法二:

  1. String result = new BufferedReader(new InputStreamReader(inputStream)) .lines().collect(Collectors.joining(System.lineSeparator()));

方法三:

  1. String result = new BufferedReader(new InputStreamReader(inputStream))
  2. .lines().parallel().collect(Collectors.joining(System.lineSeparator()));

方法四:

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

方法五:

  1. String resource = new Scanner(inputStream).useDelimiter("\\Z").next();
  2. return resource;

方法六:

  1. StringBuilder sb = new StringBuilder();
  2. String line;
  3. BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
  4. while ((line = br.readLine()) != null) {
  5. sb.append(line);
  6. }
  7. String str = sb.toString();
  8. return str;

方法七:

  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. String str = result.toString(StandardCharsets.UTF_8.name());
  8. return str;

方法八:

  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. String str = buf.toString();
  9. return str;

1.2 Apache Common提供

方法九:

  1. StringWriter writer = new StringWriter();
  2. IOUtils.copy(inputStream, writer, StandardCharsets.UTF_8.name());
  3. String str = writer.toString();

方法十:

  1. String str = IOUtils.toString(inputStream, "utf-8");

1.3 Google Guava提供

方法十一:

  1. String str = CharStreams.toString(new InputStreamReader(inputStream, StandardCharsets.UTF_8));

方法十二:

  1. String str = new String(ByteStreams.toByteArray(inputStream));

针对一个2MB的文件的输入流,多次执行测试如下(单位是毫秒):

方法十: 111
方法十一: 236
方法十二: 36
方法一: 36
方法二: 87
方法三: 66
方法四: 101
方法五: 178
方法六: 40
方法七: 21
方法八: 107
方法九: 31

从上述结果来看,方法七和方法九更好一些,而方法五和方法十一会更差一些。

2、String转化为InputStream

2.1 JDK原生提供

  1. InputStream is = new ByteArrayInputStream(str.getBytes());

2.2 Apache Common提供

  1. InputStream targetStream = IOUtils.toInputStream(str, StandardCharsets.UTF_8.name());

2.3 Google Guava提供

  1. InputStream targetStream =
  2. new ReaderInputStream(CharSource.wrap(str).openStream(), StandardCharsets.UTF_8.name());
 279

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2