如何从字符串创建 InputStream?

我不习惯在 Java 中使用流——我如何从 String创建一个 InputStream

142624 次浏览

给你:

InputStream is = new ByteArrayInputStream( myString.getBytes() );

更新 用于多字节支持(感谢 Aaron Waibel的评论) :

InputStream is = new ByteArrayInputStream(Charset.forName("UTF-16").encode(myString).array());

请参阅 字节数组输入流手册。

在上面的 字符串 # getBytes (charset)方法中使用字符集参数是安全的。

在 JDK7 + 之后,您可以使用

java.nio.charset.StandardCharsets.UTF_16

代替硬编码字符串:

InputStream is = new ByteArrayInputStream(StandardCharsets.UTF_16.encode(myString).array());

你可以这样做:

InputStream in = new ByteArrayInputStream(string.getBytes("UTF-8"));

请注意 UTF-8编码。您应该指定要将字节编码到的字符集。如果您不特别需要其他任何东西,那么选择 UTF-8是很常见的。否则,如果您不选择任何内容,您将得到可以在不同系统之间变化的默认编码。来自 JavaDoc:

当此字符串不能编码为默认字符集时,此方法的行为未指定。当需要对编码过程进行更多控制时,应该使用 CharsetEncoder 类。

InputStream in = new ByteArrayInputStream(yourstring.getBytes());

使用 com.Google.common.base 代替 charSet.forName,使用谷歌的 Guava ( http://code.Google.com/p/Guava-libraries/wiki/stringsexplained#Charsets )的字符更好一些:

InputStream is = new ByteArrayInputStream( myString.getBytes(Charsets.UTF_8) );

当然,您使用哪个 CharSet 完全取决于您将如何处理 InputStream。

Java7 +

可以利用 StandardCharsets JDK 类:

String str=...
InputStream is = new ByteArrayInputStream(StandardCharsets.UTF_16.encode(str).array());

从 Java7开始,您可以使用以下习惯用法:

String someString = "...";
InputStream is = new ByteArrayInputStream( someString.getBytes(StandardCharsets.UTF_8) );