如何从一个string创build一个InputStream?

我不习惯使用Java中的stream – 我如何从一个String创build一个InputStream

干得好:

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

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

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

请参阅ByteArrayInputStream手册。

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

你可以这样做:

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

请注意UTF-8编码。 你应该指定你想要编码字节的字符集。 如果你没有特别需要的话,selectUTF-8是很常见的。 否则,如果你没有select任何东西,你会得到不同系统之间的默认编码。 从JavaDoc :

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

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

使用Google的Guava(http://code.google.com/p/guava-libraries/wiki/StringsExplained#Charsets)中的com.google.common.base.Charsets代替CharSet.forName,稍微好一些:;

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

当然,你使用的CharSet完全取决于你要用InputStream做什么。

Java 7+

可以利用StandardCharsets JDK类:

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

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

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