如何将String
值转换为InputStreamReader
?
ByteArrayInputStream同样可行:
InputStream is = new ByteArrayInputStream( myString.getBytes( charset ) );
然后转换为读取器:
InputStreamReader reader = new InputStreamReader(is);
IOUtils
类,因此:InputStreamReader isr = new InputStreamReader(IOUtils.toInputStream(myString));
new InputStreamReader(IOUtils.toInputStream(myString, "UTF-16"), "UTF-16")
可以保证无损转换。 - McDowellString
转换为byte[]
数组再将字节转换回char
的无用转换了。 - HolgerIOUtils.toInputStream(myString, StandardCharsets.UTF_8)
也只是创建了一个 ByteArrayInputStream:new ByteArrayInputStream(input.getBytes(Charsets.toCharset(encoding)))
。 - Matthias B它必须是一个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();
。 - AabinGunzInputStreamReader
中获得a)Reader
功能,还是b)InputStream
功能?你不会得到b)。InputStreamReader
不是一个InputStream
。
InputStreamReader
的目的是将字节源InputStream
解码为字符形式的Reader
。你已经有了原始字符串的字符数据。将你的字符串编码为字节,然后再将字节解码回字符将是一种多余的操作。Reader
,请使用StringReader
。InputStream
,可以使用其他答案中建议的apache commons IOUtils.toInputStream(..)
。您可以尝试使用Cactoos:
InputStream stream = new InputStreamOf(str);
如果需要一个Reader
:
Reader reader = new ReaderOf(stream);
ByteArrayInputStream
:自从JDK1.0以来。没有任何理由认为这个类是“自Java 1.4以来”的。那个错误的版本号特别奇怪,因为Java 1.4引入了NIO
,在同一个版本中引入API及其概念上的继承者是没有多少意义的。 - Holger