如何将Reader转换为InputStream而将Writer转换为OutputStream?
时间:2020-03-05 18:53:16 来源:igfitidea点击:
有没有一种简单的方法可以避免处理文本编码问题?
解决方案
回答
这些类的明显名称是ReaderInputStream和WriterOutputStream。不幸的是,这些未包含在Java库中。但是,谷歌是你的朋友。
我不确定是否会解决所有噩梦般的文本编码问题。
有一个RFE,但已关闭,无法解决。
回答
我们真的无法避免处理文本编码问题,但是有一些现有的解决方案:
- 从Reader到InputStream:ReaderInputStream。
- 从
Writer
到OutputStream
:WriterOutputStream
我们只需要选择所需的编码即可。
回答
我们是否正在尝试将Reader
的内容写入OutputStream
中?如果是这样,我们将有一个更轻松的时间将OutputStream
包裹在OutputStreamWriter
中,并将char
s从Reader
写入Writer
,而不是尝试将阅读器转换为InputStream
。 :
final Writer writer = new BufferedWriter(new OutputStreamWriter( urlConnection.getOutputStream(), "UTF-8" ) ); int charsRead; char[] cbuf = new char[1024]; while ((charsRead = data.read(cbuf)) != -1) { writer.write(cbuf, 0, charsRead); } writer.flush(); // don't forget to close the writer in a finally {} block
回答
还要注意,如果我们以String开头,则可以使用Commons IO中的org.apache.commons.io.IOUtils跳过创建StringReader并一步一步创建InputStream,如下所示:
InputStream myInputStream = IOUtils.toInputStream(reportContents, "UTF-8");
当然,我们仍然需要考虑文本编码,但是至少转换是一步完成的。
回答
如果从字符串开始,还可以执行以下操作:
new ByteArrayInputStream(inputString.getBytes("UTF-8"))
回答
commons-io 2.0具有WriterOutputStream