参考:https://blog.csdn.net/lmy86263/article/details/60479350
eg:
InputStream in = PropertiesUtils.class.getResourceAsStream("/properties/milestoneTest.text");
response = new BufferedReader(new InputStreamReader(in))
.lines().collect(Collectors.joining(System.lineSeparator()));
在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());
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?