【问题标题】:How do I convert a String to an InputStream in Java?如何在 Java 中将字符串转换为 InputStream?
【发布时间】:2010-10-21 09:31:56
【问题描述】:

给定一个字符串:

String exampleString = "example";

如何将其转换为InputStream?

【问题讨论】:

  • InputStreams 看字节,Readers 看字符。

标签: java string type-conversion inputstream


【解决方案1】:

像这样:

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

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

对于低于 7 的 Java 版本,将 StandardCharsets.UTF_8 替换为 "UTF-8"。

【讨论】:

  • 在执行以下操作时,这个字符集不会丢失吗: String --> bytes --> ByteArrayInputStream ?在例如“ü”上尝试此操作时,字节将具有正确的字母,但 ByteArrayInputStream 将丢失正确的转换。还是我错了?
  • StandardCharsets 要求最低 API 级别 19。
  • @JonathanRamos 不取决于流来保持转换。这取决于将字节解码回字符串。
  • @Nantoka 您可以将 Charset.forName("UTF-8") 用于任何 API 级别,而不是 StandardCharsets.UTF_8。
  • 它的工作只是我添加 String newStr = URLDecoder.decode(URLEncoder.encode(response, "iso8859-1"),"UTF-8");对于(utf8)
【解决方案2】:

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

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

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

【讨论】:

  • 他们使用了新的 ByteArrayInputStream(exampleString.getBytes("UTF-8"))。因此将优化使用 InputStream stream = new ByteArrayInputStream(exampleString.getBytes("UTF-8"));
  • @PankajKumar:Java 的 JIT 编译器能够内联这个。
  • 使用不指定编码的方法是个糟糕的主意...
  • @b1naryatr0phy:Apache commons 包含此方法的另一种形式,它将编码作为第二个参数(你说得对,它更可取): InputStream in = IOUtils.toInputStream(source, "UTF -8");
  • 您可以使用StandardCharsets.UTF_8 定义而不是纯文本。
【解决方案3】:

您可以使用StringReader 并使用this other stackoverflow post 中的解决方案将阅读器转换为输入流。

【讨论】:

    【解决方案4】:

    在Java中有两种方法可以将String转换为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);
    

    【讨论】:

      【解决方案5】:

      你可以试试cactoos。

      final InputStream input = new InputStreamOf("example");
      

      对象是使用new 创建的,而不是a reason 的静态方法。

      【讨论】:

        猜你喜欢
        • 2010-12-18
        • 2010-09-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多