最常用方式是用ByteArrayInputStream封装字符串字节数组,必须显式指定UTF-8等编码避免乱码,如new ByteArrayInputStream(str.getBytes(StandardCharsets.UTF_8));其无需close,try-with-resources非必需。

Java 中将 String 转为 InputStream,最常用、最直接的方式就是用 ByteArrayInputStream,它把字符串的字节数组作为数据源封装成输入流。
确保使用正确的字符编码
String 本身是 Unicode 字符序列,转成字节数组时必须指定编码(如 UTF-8),否则可能乱码或抛异常。推荐显式传入编码名,不要依赖平台默认编码。
- ✅ 正确写法:
new ByteArrayInputStream(str.getBytes(StandardCharsets.UTF_8)) - ❌ 避免写法:
new ByteArrayInputStream(str.getBytes())(依赖系统默认编码,不可靠)
完整示例代码
以下是一个安全、可直接运行的转换方式:
String content = "Hello, 世界"; InputStream is = new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8));
后续可将其传给需要 InputStream 的 API,比如 Properties.load(is) 或 Jackson 的 ObjectMapper.readValue(is, ...)。
立即学习“Java免费学习笔记(深入)”;
注意资源管理(无需 close,但需了解)
ByteArrayInputStream 是基于内存数组的流,不涉及文件或网络资源,调用 close() 没有效果,也不强制要求关闭。但它实现了 AutoCloseable,所以放在 try-with-resources 里也不会出错,只是没必要。
- 可以写:
try (InputStream is = new ByteArrayInputStream(...)) { ... } - 也可以不写 try-with-resources,尤其在短生命周期场景下更简洁
替代方案:Apache Commons IO 或 Guava(非必需)
如果你项目已引入 Apache Commons IO,可用 IOUtils.toInputStream(String, Charset),语义更清晰;Guava 提供 ByteSource.wrap(string.getBytes(charset)).openStream()。但纯 JDK 场景下,ByteArrayInputStream + getBytes(StandardCharsets.XXX) 就足够了,不增加额外依赖。


















