Answers:
ByteArrayInputStream也可以做到这一点:
InputStream is = new ByteArrayInputStream( myString.getBytes( charset ) );
然后转换为阅读器:
InputStreamReader reader = new InputStreamReader(is);
ByteArrayInputStream :从以下版本开始: JDK1.0没有丝毫理由假定此类是“自Java 1.4起”。当引入Java 1.4时,该错误的版本号尤其奇怪,NIO在同一版本中引入API及其概念性后继者几乎没有道理。
我还找到了apache commons IOUtils类,因此:
InputStreamReader isr = new InputStreamReader(IOUtils.toInputStream(myString));
new InputStreamReader(IOUtils.toInputStream(myString, "UTF-16"), "UTF-16")将会是无损的。
String转换为byte[]数组以将字节转换回chars的无用了……
是否必须专门是InputStreamReader?使用StringReader怎么样?
否则,您可以使用StringBufferInputStream,但是由于字符转换问题(因此,您应该首选StringReader),不建议使用它。
与@Dan相同的问题-为什么不使用StringReader?
如果必须是InputStreamReader,则:
String charset = ...; // your charset
byte[] bytes = string.getBytes(charset);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
InputStreamReader isr = new InputStreamReader(bais);
byte[] bytes = charset.getBytes();
您是否正在尝试使a)Reader功能失效InputStreamReader,或者b)使InputStream功能失效InputStreamReader?你不会得到b)。 InputStreamReader不是InputStream。
的目的InputStreamReader是获取一个InputStream-字节源-并将字节解码为char形式的char Reader。您已经将数据作为chars(原始String)。将您的String编码为字节,然后将字节解码为char将是多余的操作。
如果您试图摆脱Reader困境,请使用StringReader。
如果您尝试获取一个InputStream(只能提供字节数),请IOUtils.toInputStream(..)按照此处其他答案的建议使用apache commons 。