JavaInputStream转String

在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


---------------------

本文作者:cookieM

本文链接:https://www.cnblogs.com/cookieM/p/16147163.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   cookieM  阅读(1112)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
  1. 1 风吹过八千里 苏星婕
风吹过八千里 - 苏星婕
00:00 / 00:00
An audio error has occurred.

风吹过八千里 - 苏星婕

词:巴欧特

曲:Moni鱼子酱

编曲:东阳

录音师:候天宇

录音棚:莫非录音棚(成都)

混音/母带:候天宇

监制:莫非

设计:晴纸

有些话何必说清没有意义

请你当做我自作多情

一人完成两个人的不通关游戏

为何你还不满意

冰箱里的东西早就过期

留言还是周一

到夜深人静

只剩我和空气没道理

你说爱情仅此而已

谁还没有一丝委屈

不再关心我的世界下了雨

像风吹过八千里

流云和月都曾爱过你

可是潮汐干涸在有情人的海底

那最潮湿的爱意

携裹着最伤人语句

或许遥不可及才得人心

冰箱里的东西早就过期

留言还是周一

到夜深人静

只剩我和空气没道理

你说爱情仅此而已

谁还没有一丝委屈

不再关心我的世界下了雨

像风吹过八千里

流云和月都曾爱过你

可是潮汐干涸在有情人的海底

那最潮湿的爱意

携裹着最伤人语句

或许遥不可及才得人心

像风吹过八千里

流云和月都曾爱过你

流云和月都曾爱过你

可是潮汐干涸在有情人的海底

那最潮湿的爱意

那最潮湿的爱意

携裹着最伤人语句

携裹着最伤人语句

或许遥不可及 才得人心

或许遥不可及 才得人心