如何从String创建InputStream?

Ami*_*hum 117 java string stream

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

anu*_*ava 151

干得好:

InputStream is = new ByteArrayInputStream( myString.getBytes() );
Run Code Online (Sandbox Code Playgroud)

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

InputStream is = new ByteArrayInputStream(Charset.forName("UTF-16").encode(myString).array());
Run Code Online (Sandbox Code Playgroud)

请参阅ByteArrayInputStream手册.

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

在JDK 7+之后你可以使用

java.nio.charset.StandardCharsets.UTF_16
Run Code Online (Sandbox Code Playgroud)

而不是硬编码的编码字符串:

InputStream is = new ByteArrayInputStream(StandardCharsets.UTF_16.encode(myString).array());
Run Code Online (Sandbox Code Playgroud)

  • @Aaron:不,`String.getBytes()`将使用平台默认编码(可能是也可能不是你想要的编码).对我来说,这是UTF-8(可以编码所有Java字符串).正确的答案是"指出你真正想要的编码",而不是"使用UTF-16".您可以将它与`.getBytes(charsetName)`一起使用,不必显式创建Charset对象并将String编码为ByteBuffer. (9认同)

Whi*_*g34 34

你可以这样做:

InputStream in = new ByteArrayInputStream(string.getBytes("UTF-8"));
Run Code Online (Sandbox Code Playgroud)

注意UTF-8编码.您应该指定要编码的字节的字符集.UTF-8如果您不需要其他任何东西,通常会选择.否则,如果您不选择任何内容,您将获得可在系统之间变化的默认编码.来自JavaDoc:

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