如何在Java中将String转换为InputStream?

Iai*_*ain 826 java string inputstream type-conversion

给定一个字符串:

String exampleString = "example";
Run Code Online (Sandbox Code Playgroud)

我如何将其转换为InputStream

Iai*_*ain 1375

像这样:

InputStream stream = new ByteArrayInputStream(exampleString.getBytes(StandardCharsets.UTF_8));
Run Code Online (Sandbox Code Playgroud)

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

对于小于7的Java版本,请替换StandardCharsets.UTF_8"UTF-8".

  • @Nantoka您可以将Charset.forName("UTF-8")用于任何API级别,而不是StandardCharsets.UTF_8. (25认同)
  • StandardCharsets要求最低API级别19. (20认同)
  • @JonathanRamos它不能保持转换的流.这取决于将字节解码回字符串的任何内容. (3认同)
  • 当执行以下操作时,此字符集不会丢失: String --> bytes --> ByteArrayInputStream 吗?例如,当在“ü”上尝试此操作时,字节将具有正确的字母,但 ByteArrayInputStream 将丢失正确的转换。还是我错了? (2认同)

Eli*_*jah 267

我发现使用Apache Commons IO让我的生活变得更轻松.

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

您可能会发现该库还提供了许多其他快捷方式,可用于您可以在项目中使用的常用任务.

  • @PankajKumar:Java的JIT编译器非常能够内联它. (9认同)
  • 使用不指定编码的方法是一个可怕的想法...... (8认同)
  • 您可以使用`StandardCharsets.UTF_8`定义而不是纯文本. (8认同)
  • 他们使用了新的ByteArrayInputStream(exampleString.getBytes("UTF-8")).所以它将优化使用InputStream的方式stream = new ByteArrayInputStream(exampleString.getBytes("UTF-8")); (5认同)
  • @ b1naryatr0phy:Apache commons包含了另一种形式的方法,它将编码作为第二个参数(你是对的,更好):InputStream in = IOUtils.toInputStream(source,"UTF-8"); (2认同)

A_M*_*A_M 36

您可以使用StringReader并使用此其他stackoverflow帖子中的解决方案将阅读器转换为输入流.


Ani*_*rgi 18

在Java中我们可以通过两种方式将String转换为InputStream,

  1. 使用 ByteArrayInputStream

例子 :-

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

例子:-

String str = "String contents"
InputStream is = IOUtils.toInputStream(str, StandardCharsets.UTF_8);
Run Code Online (Sandbox Code Playgroud)