Contents

将 String 转换为 InputStream

1. 概述

在本快速教程中,我们将了解如何使用纯 Java、Guava 和 Apache Commons IO 库将标准 String 转换为InputStream

2. 使用纯 Java 进行转换

让我们从一个使用 Java 进行转换的简单示例开始——使用中间Byte数组:

@Test
public void givenUsingPlainJava_whenConvertingStringToInputStream_thenCorrect() 
  throws IOException {
    String initialString = "text";
    InputStream targetStream = new ByteArrayInputStream(initialString.getBytes());
}

请注意,getBytes()方法使用平台的默认字符集对此String进行编码,因此为了避免不良行为,您可以使用*getBytes(Charset charset)*并控制编码过程

3. 使用Guava进行转换

Guava 不提供直接转换方法,但允许我们从String中获取CharSource并轻松将其转换为ByteSource。然后,获取InputStream很容易:

@Test
public void givenUsingGuava_whenConvertingStringToInputStream_thenCorrect() 
  throws IOException {
    String initialString = "text";
    InputStream targetStream = 
      CharSource.wrap(initialString).asByteSource(StandardCharsets.UTF_8).openStream();
}

但是请注意,asByteSource方法被标记为*@Beta*。这意味着它可以在未来的 Guava 版本中删除。我们需要牢记这一点。

4. 使用 Commons IO 转换

最后,Apache Commons IO 库提供了一个出色的直接解决方案:

@Test
public void givenUsingCommonsIO_whenConvertingStringToInputStream_thenCorrect() 
  throws IOException {
    String initialString = "text";
    InputStream targetStream = IOUtils.toInputStream(initialString);
}

最后——请注意,我们在这些示例中将输入流保持打开状态——完成后不要忘记关闭它