https://blog.csdn.net/lmy86263/article/details/60479350

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

方法一:
byte[] bytes = new byte[0];
bytes = new byte[inputStream.available()];
inputStream.read(bytes);
String str = new String(bytes);

1
2
3
4
5

方法二:
String result = new BufferedReader(new InputStreamReader(inputStream))
.lines().collect(Collectors.joining(System.lineSeparator()));

1
2
3

方法三:
String result = new BufferedReader(new InputStreamReader(inputStream))
.lines().parallel().collect(Collectors.joining(System.lineSeparator()));

1
2
3

方法四:
Scanner s = new Scanner(inputStream).useDelimiter("\\A");
String str = s.hasNext() ? s.next() : "";

1
2
3

方法五:
String resource = new Scanner(inputStream).useDelimiter("\\Z").next();
return resource;

1
2
3

方法六:
StringBuilder sb = new StringBuilder();
String line;

BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
while ((line = br.readLine()) != null) {
sb.append(line);
}
String str = sb.toString();
return str;

1
2
3
4
5
6
7
8
9
10

方法七:
ByteArrayOutputStream result = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) != -1) {
result.write(buffer, 0, length);
}
String str = result.toString(StandardCharsets.UTF_8.name());
return str;

1
2
3
4
5
6
7
8
9

方法八:
BufferedInputStream bis = new BufferedInputStream(inputStream);
ByteArrayOutputStream buf = new ByteArrayOutputStream();
int result = bis.read();
while(result != -1) {
buf.write((byte) result);
result = bis.read();
}
String str = buf.toString();
return str;

1
2
3
4
5
6
7
8
9
10

1.2 Apache Common提供

方法九:
StringWriter writer = new StringWriter();
IOUtils.copy(inputStream, writer, StandardCharsets.UTF_8.name());
String str = writer.toString();

1
2
3
4

方法十:
String str = IOUtils.toString(inputStream, "utf-8");

1
2

1.3 Google Guava提供

方法十一:
String str = CharStreams.toString(new InputStreamReader(inputStream, StandardCharsets.UTF_8));

1
2

方法十二:
String str = new String(ByteStreams.toByteArray(inputStream));

1
2

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

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

从上述结果来看,方法七和方法九更好一些,而方法五和方法十一会更差一些。
2、String转化为InputStream
2.1 JDK原生提供

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

1

2.2 Apache Common提供

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

1

2.3 Google Guava提供

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

1
2

---------------------
作者:lmy86263
来源:CSDN
原文:https://blog.csdn.net/lmy86263/article/details/60479350
版权声明:本文为博主原创文章,转载请附上博文链接!

Java中InputStream和String之间的转化的更多相关文章

  1. Java中InputStream和String之间的转换方法

    1.InputStream转化为String1.1 JDK原生提供方法一:byte[] bytes = new byte[0];bytes = new byte[inputStream.availab ...

  2. java中Integer 和String 之间的转换

    java中Integer 和String 之间的转换 将数组转换成字符串:char[] array = {'a','b','c','d','e'};String str = new String(ar ...

  3. java中int和String之间的转换

    String 转为int int i = Integer.parseInt([String]); int i = Integer.valueOf(my_str).intValue(); int转为St ...

  4. JAVA中java.util.Date、java.sql.Timestamp和String之间的互相转换

    java.util.Date与的String互转 java.util.Date---->String /** * 将java.util.Date对象转化为String字符串 * @param d ...

  5. C#中char[]与string之间的转换;byte[]与string之间的转化

    目录 1.char[]与string之间的转换 2.byte[]与string之间的转化 1.char[]与string之间的转换 //string 转换成 Char[] string str=&qu ...

  6. Java 中基本类型和字符串之间的转换

    Java 中基本类型和字符串之间的转换 在程序开发中,我们经常需要在基本数据类型和字符串之间进行转换. 其中,基本类型转换为字符串有三种方法: 1. 使用包装类的 toString() 方法 2. 使 ...

  7. java对象与Json字符串之间的转化(fastjson)

    1. 首先引入jar包 在pom.xml文件里加入下面依赖: <dependency> <groupId>com.alibaba</groupId> <art ...

  8. Java学习--Java 中基本类型和字符串之间的转换

    Java 中基本类型和字符串之间的转换 在程序开发中,我们经常需要在基本数据类型和字符串之间进行转换. 其中,基本类型转换为字符串有三种方法: 1. 使用包装类的 toString() 方法 2. 使 ...

  9. Java中字节与对象之间的转换

    近期公司里面用到了消息队列,而正如我们知道的是消息队列之间的是通过二进制形式的.以下就分享一下java中字节与对象之间的转换. 主要是用到了ByteArrayOutputStream和ObjectOu ...

随机推荐

  1. ThreeJS模拟人沿着路径运动-路径箭头使用纹理offset偏移

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 【转载】shell实例手册

    原文地址:shell实例手册  作者:没头脑的土豆 shell实例手册 0说明{ 手册制作: 雪松 更新日期: -- 欢迎系统运维加入Q群: 请使用"notepad++"打开此文档 ...

  3. C#可遍历的集合

    public class Product { /// <summary> /// 自增ID /// </summary> public int ID { get; set; } ...

  4. Google APAC----Africa 2010, Qualification Round(Problem A. Store Credit)----Perl 解法

    原题地址链接:https://code.google.com/codejam/contest/351101/dashboard#s=p0 问题描述: Problem You receive a cre ...

  5. 单选按钮(RadioButton)

    一:RadioButton的相关属性: 1.Activity //单选按钮 public class RadioButtonActivity extends Activity { private Co ...

  6. Linux虚拟机将ip改为自定义模式网络

    查看当前ip:ifconfig 配置linux的ip地址:vi /etc/sysconfig/network-scripts/ifcfg-ens33 BOOTPROTO="dhcp" ...

  7. 【Oracle】锁表处理 SQL 错误: ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效

    问题描述有时候ORACLE数据的某些表由于频繁操作,而且比较大,会导致锁表(死锁). 问题分析(1)锁的分析ORACLE里锁有以下几种模式:0:none1:null 空2:Row-S 行共享(RS): ...

  8. leetcode Ch6-Data Structure

    1. Sliding Window Maximum class Solution { public: vector<int> maxSlidingWindow(vector<int& ...

  9. 《Python指南》学习笔记 一

    更新时间:2018-06-14 <Python指南>原文在这里.本篇笔记主要是划重点. Python 3.6.3 1.简单入门 1.1 编码 默认情况下,Python 源文件是 UTF-8 ...

  10. C#中IL, CTS, CLR, CLS, JIT含义

    1. IL/MSIL  (Microsoft Intermediate Language) 微软中间语言 (IL是MSIL的缩写,译为中间语言) 2. CTS  (Common Type System ...