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[]
数组以将字节转换回char
s的无用了……
是否必须专门是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 。