如何从String创建InputStream? [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从String创建InputStream? [重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我不习惯使用Java中的流 - 如何从InputStream创建String

答案

干得好:

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

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

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

请参阅ByteArrayInputStream手册。

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

在JDK 7+之后你可以使用

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());
另一答案

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) );
另一答案

而不是使用CharSet.forName,使用来自Google的Guava的com.google.common.base.Charsets(http://code.google.com/p/guava-libraries/wiki/StringsExplained#Charsets)稍微好一些:

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

您使用哪个CharSet完全取决于您将使用InputStream做什么,当然。

以上是关于如何从String创建InputStream? [重复]的主要内容,如果未能解决你的问题,请参考以下文章

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

如何从 Document 或 Node 创建 InputStream

如何从 JsonObject 创建 InputStream 对象

如何从 InputStream 创建图像,调整大小并保存?

如何从 Vala 中的字符串创建 InputStream

如何从 Java 8 Streams 中获取 Inputstream?