如何从 java.lang.String 获取 java.io.InputStream?

2022-08-31 10:45:41

我有一个我想用作.在Java 1.0中,您可以使用java.io.StringBufferInputStream,但这种情况一直存在(有充分的理由 - 您无法指定字符集编码):StringInputStream@Deprecrated

此类无法将字符正确转换为字节。从 JDK 1.1 开始,从字符串创建流的首选方法是通过类。StringReader

您可以使用java.io.StringReader创建java.io.Reader,但是没有适配器可以采用并创建.ReaderInputStream

我发现一个古老的错误要求一个合适的替代品,但据我所知,不存在这样的事情。

经常建议的解决方法是使用java.lang.String.getBytes()作为java.io.ByteArrayInputStream的输入:

public InputStream createInputStream(String s, String charset)
    throws java.io.UnsupportedEncodingException {

    return new ByteArrayInputStream(s.getBytes(charset));
}

但这意味着将内存中的全部具体化为字节数组,并违背了流的目的。在大多数情况下,这没什么大不了的,但我正在寻找一些可以保留流意图的东西 - 尽可能少的数据在内存中(重新)具体化。String


答案 1

更新:这个答案正是OP不想要的。请阅读其他答案。

对于我们不关心数据在内存中重新具体化的情况,请使用:

new ByteArrayInputStream(str.getBytes("UTF-8"))

答案 2

如果你不介意对 commons-io 包的依赖,那么你可以使用 IOUtils.toInputStream(String text) 方法。