如何在java中将字符串转换为InputStreamReader?

如何在java中将字符串转换为InputStreamReader?,java,string,stream,Java,String,Stream,如何将字符串值转换为InputStreamReader?它必须是专门的InputStreamReader吗?使用如何 否则,您可以使用,但由于字符转换问题(这就是您应该更喜欢StringReader的原因),它已被弃用。还可以实现以下功能: InputStream is = new ByteArrayInputStream( myString.getBytes( charset ) ); 然后转换为读卡器: InputStreamReader reader = new InputStreamR

如何将
字符串
值转换为
InputStreamReader

它必须是专门的InputStreamReader吗?使用如何

否则,您可以使用,但由于字符转换问题(这就是您应该更喜欢StringReader的原因),它已被弃用。

还可以实现以下功能:

InputStream is = new ByteArrayInputStream( myString.getBytes( charset ) );
然后转换为读卡器:

InputStreamReader reader = new InputStreamReader(is);
同样的问题-为什么不是StringReader

如果必须输入StreamReader,则:

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

我还发现了apache commons
IOUtils
类,因此:

InputStreamReader isr = new InputStreamReader(IOUtils.toInputStream(myString));
您是否试图从
InputStreamReader
中获取a)
Reader
功能,或从
InputStreamReader
中获取b)
InputStream
功能?你得不到b)
InputStreamReader
不是
InputStream

InputStreamReader
的目的是获取一个
InputStream
(字节源),并以
读取器的形式将字节解码为字符。您已经将数据设置为字符(原始字符串)。将字符串编码为字节并将字节解码回字符将是一个冗余操作

如果您试图从源代码中获取
读取器
,请使用
StringReader

如果您试图获取一个
InputStream
(只提供字节),请按照此处其他答案的建议,使用apache commons
IOUtils.toInputStream(..)

您可以尝试:

然后,如果您需要
读卡器

Reader reader = new ReaderOf(stream);

您可能希望继承平台的默认字符集。谢谢。完成。检测plataform默认字符集的最佳方法是什么?或者只使用getBytes()而不使用参数。。。可以说它不应该存在,但它将使用默认编码。:Since:JDK1.0没有任何理由假设这个类是“Since java1.4”。由于Java 1.4引入了
NIO
,这个错误的版本号特别奇怪,在同一版本中引入API及其概念上的后续版本毫无意义。转换字符串->字节[]或反之亦然,而不提及字符编码几乎总是一个错误。这可能会导致数据丢失,取决于默认平台编码和字符串中的字符。为编码和解码操作指定Unicode编码会更好。阅读本文了解更多详细信息:编码参数不是只需要在特定编码中获取字节吗?我认为,只要为String#getBytes调用选择与为InputSTreamReader构造函数选择相同的编码,那么选择哪种编码并不重要。我很肯定约阿希姆和麦克道尔在这个具体案件中是错的。将InputStreamReader包装成字符串不需要任何编码知识。@Stijn de Witt-我知道,但我刚刚看到了这个迟来的回答。如果默认平台编码不支持字符串中的代码点,将导致数据丢失。如果默认编码为UTF-8,则没有问题。如果您在Windows上运行,您将丢失大部分Unicode集,因为这些JRE默认为传统的“ANSI”编码。证据在我发布的链接中<代码>新的InputStreamReader(IOUtils.toInputStream(myString,“UTF-16”),“UTF-16”)
将是无损的。万岁,使用第三方库将一个一行程序转换为…一个更大的一行程序。不要说将
字符串
转换成
字节[]
数组以将字节转换回
字符
s是无用的,那么…很好,但是第二行应该是
字节[]字节=charset.getBytes()Reader reader = new ReaderOf(stream);