如何在Java中将String转换为InputStreamReader?

Yos*_*ale 277 java string stream

如何将String值转换为InputStreamReader

Gui*_*ido 323

ByteArrayInputStream也可以解决这个问题:

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

  • 或者只使用没有参数的getBytes()...可以说它不应该存在,但它将使用默认编码. (5认同)
  • 您可能*希望*继承平台的默认字符集. (3认同)
  • 谢谢.完成.检测plataform默认字符集的最佳方法是什么? (2认同)

Yos*_*ale 61

我还找到了apache commons IOUtils类,所以:

InputStreamReader isr = new InputStreamReader(IOUtils.toInputStream(myString));
Run Code Online (Sandbox Code Playgroud)

  • 转换String-> byte []或反之亦然而不提及字符编码几乎总是一个bug. (34认同)
  • @Stijn de Witt - 迟来的回复我知道,但我刚看到这个.如果默认平台编码不支持字符串中的代码点,则会导致数据丢失.如果你的默认编码是UTF-8,没问题.如果您在Windows上运行,则会丢失大部分Unicode集,因为这些JRE默认为传统的"ANSI"编码.证据在我发布的链接中.`new InputStreamReader(IOUtils.toInputStream(myString,"UTF-16"),"UTF-16")`将是无损的. (4认同)

Dan*_*yer 32

它必须特别是一个InputStreamReader吗?使用StringReader怎么样?

否则,您可以使用StringBufferInputStream,但由于字符转换问题而不推荐使用它(这就是您应该首选StringReader的原因).


too*_*kit 16

@Dan一样的问题- 为什么不是StringReader?

如果它必须是InputStreamReader,那么:

String charset = ...; // your charset
byte[] bytes = string.getBytes(charset);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
InputStreamReader isr = new InputStreamReader(bais);
Run Code Online (Sandbox Code Playgroud)