如何从字符串创建 InputStream? [复制]

Posted

技术标签:

【中文标题】如何从字符串创建 InputStream? [复制]【英文标题】:How does one create an InputStream from a String? [duplicate] 【发布时间】:2011-08-08 21:31:20 【问题描述】:

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

【问题讨论】:

你将如何使用从 String 创建的 InputStream? 【参考方案1】:

给你:

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

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

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

请参阅ByteArrayInputStream 手册。

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

JDK 7+之后就可以使用了

java.nio.charset.StandardCharsets.UTF_16

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

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

【讨论】:

这将导致除 0x00 之外的第一个字节的字符被修剪,更准确地说,你应该这样做 InputStream is = new ByteArrayInputStream(Charset.forName("UTF-16").encode(myString()).array()) @Aaron: 不,String.getBytes() 将使用平台默认编码(可能是也可能不是你想要的那个)。对我来说,这是 UTF-8(可以编码所有 Java 字符串)。正确的答案是“指明你真正想要的编码”,而不是“使用 UTF-16”。您可以将它与.getBytes(charsetName) 一起使用,不必显式创建 Charset 对象并将字符串编码为 ByteBuffer。 不使用 String.getBytes 怎么样?它分配字符串的副本,因此它不是内存有效的解决方案。使用 inputstream 的原因通常是为了避免在内存中保留大对象的副本 这个答案可以更新为提及java.nio.charset.StandardCharsets.UTF_16 好建议@kevinarpe,我已编辑。【参考方案2】:

你可以这样做:

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

注意UTF-8 编码。您应该指定要将字节编码到的字符集。如果您没有特别需要其他任何东西,通常选择UTF-8。否则,如果您不选择任何内容,您将获得可能因系统而异的默认编码。来自JavaDoc:

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

【讨论】:

【参考方案3】:
InputStream in = new ByteArrayInputStream(yourstring.getBytes());

【讨论】:

【参考方案4】:

使用来自 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 做什么。

【讨论】:

【参考方案5】:

Java 7+

可以利用StandardCharsets JDK 类:

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

【讨论】:

【参考方案6】:

从 Java 7 开始,您可以使用以下成语:

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

【讨论】:

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

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

如何在 Java 中将字符串读入 inputStream? [复制]

Java如何从InputStream中读取收入大小? [复制]

从来自 java 中 InputStream 的字符串创建 Spark RDD 或数据帧

如何从 Document 或 Node 创建 InputStream

如何从 JsonObject 创建 InputStream 对象