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

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

【问题讨论】:

  • 你将如何使用从 String 创建的 InputStream?

标签: java string stream


【解决方案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) );
          

          【讨论】:

            猜你喜欢
            • 2012-02-18
            • 2011-10-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-01-11
            • 2016-02-10
            • 2014-03-25
            • 2012-12-23
            相关资源
            最近更新 更多