在Java中如何将字符串转换为输入流?

1018

给定一个字符串:

String exampleString = "example";

我该如何将它转换为InputStream


InputStreams 关注字节,而 Readers 关注字符。 - Thorbjørn Ravn Andersen
5个回答

1606

像这样:

InputStream stream = new ByteArrayInputStream(exampleString.getBytes(StandardCharsets.UTF_8));

请注意,这假设您想要一个InputStream,它是表示原始字符串编码为UTF-8的字节流。

对于低于Java 7版本的情况,请使用"UTF-8"替换StandardCharsets.UTF_8


2
当执行String --> bytes --> ByteArrayInputStream时,字符集是否会丢失?例如,当尝试将“ü”转换为字节时,字节将具有正确的字母,但是ByteArrayInputStream将已经丢失正确的转换。或者我错了吗? - Jonathan Ramos
21
StandardCharsets 要求最低 API 级别为 19。 - Nantoka
3
@JonathanRamos,这不是流的责任来进行转换,而是由将字节重新解码为字符串的任何实体来负责。 - Cruncher
27
@Nantoka,对于任何API级别,您可以使用Charset.forName("UTF-8")代替StandardCharsets.UTF_8。 - PJ_Finnegan
1
如果您有大型字符串对象并希望节省内存/分配,那么这并不美观。一个适当的流式解决方案会很好。 - Dave Moten
显示剩余2条评论

291

我发现使用Apache Commons IO可以让我的生活更轻松。

String source = "This is the source of my input stream";
InputStream in = org.apache.commons.io.IOUtils.toInputStream(source, "UTF-8");

你可能会发现该库还提供了许多其他常见任务的快捷方式,这些快捷方式可能对你的项目有用。


6
他们使用了新的ByteArrayInputStream(exampleString.getBytes("UTF-8"))。因此,将InputStream优化为stream = new ByteArrayInputStream(exampleString.getBytes("UTF-8"))会更好。 - Pankaj Kumar
10
Java的JIT编译器完全可以将这个进行内联。 - Andrew White
9
不指定编码方式的方法是一个糟糕的想法... - arkon
2
@b1naryatr0phy:Apache Commons 包含另一种形式的此方法,它将编码作为第二个参数(你是对的,这是更可取的):InputStream in = IOUtils.toInputStream(source, "UTF-8"); - Cuga
8
你可以使用 StandardCharsets.UTF_8 的定义来替代纯文本。 - douglaslps
显示剩余2条评论

43

17

在Java中,我们可以通过两种方式将字符串转换为InputStream:

  1. 使用ByteArrayInputStream

示例:

String str = "String contents";
InputStream is = new ByteArrayInputStream(str.getBytes(StandardCharsets.UTF_8));
  1. 使用Apache Commons IO

示例:

String str = "String contents"
InputStream is = IOUtils.toInputStream(str, StandardCharsets.UTF_8);

嗨@anil,您有意见/经验哪个更好吗? - soMuchToLearnAndShare
1
我认为,使用Apache Commons IO是更好的选择。 - Anil Nivargi

0
你可以试试 cactoos
final InputStream input = new InputStreamOf("example");

对象是通过new创建的,而不是静态方法,原因是某个原因


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接