如何转换读者InputStream和文学家到的OutputStream?如何转换读者InputStr

2019-05-13 08:54发布

有没有一种简单的方法,以避免处理文本编码的问题?

Answer 1:

你真的无法避免处理文本编码的问题,但也有现有的解决方案:

  • ReaderInputStreamReaderInputStream
  • WriterOutputStreamWriterOutputStream

你只需要选择您所选择的编码。



Answer 2:

如果你是一个字符串出发,你也可以做到以下几点:

new ByteArrayInputStream(inputString.getBytes("UTF-8"))


Answer 3:

好了,读者与人物,并与字节的InputStream交易的交易。 该编码指定您希望如何表现你的角色为字节,所以你不能真正忽视的问题。 至于避免的问题,我的看法是:选择一个字符集(如“UTF-8”),并坚持下去。

至于如何真正做到这一点,因为已经指出,“ 这些类的明显名称ReaderInputStreamWriterOutputStream。”出人意料的是,“ 这些都是不包含在Java库 ”即使“”相反班, InputStreamReader的和OutputStreamWriter 包括在内。

所以,很多人都拿出了自己的实现,包括Apache 下议院IO 。 根据许可证的问题,你可能会能够包括公地IO库在你的项目中,甚至复制源代码的一部分(这是下载这里 )。

  • 阿帕奇ReaderInputStream: API / 源代码直接链接
  • 阿帕奇WriterOutputStream: API / 源代码直接链接

正如你所看到的,这两个类文件规定,‘由JRE支持的所有字符集编码正确处理’。

NB在其他的答案中的一个注释这里提到了这个bug 。 但是,这会影响Apache Ant的 ReaderInputStream类( 在这里 ), 而不是 Apache 下议院IO ReaderInputStream类。



Answer 4:

还要注意的是,如果你开始了与一个字符串,你可以跳过创建一个StringReader并使用org.apache.commons.io.IOUtils从一个步骤创建一个InputStream 下议院IO像这样:

InputStream myInputStream = IOUtils.toInputStream(reportContents, "UTF-8");

当然,你还需要考虑文本编码,但至少在转换在一个步骤发生。



Answer 5:

使用:

new CharSequenceInputStream(html, StandardCharsets.UTF_8);

这种方式不需要前期转换为String ,然后byte[]其中分配更多的堆内存,以防报表较大。 它把在飞行到字节流中读取,直接从StringBuffer的。

它采用CharSequenceInputStream从Apache的百科全书IO项目。



Answer 6:

公地-io的2.0具有WriterOutputStream



Answer 7:

这些类的名字显然是ReaderInputStream和WriterOutputStream。 不幸的是,这些不包含在Java库。 然而,谷歌是你的朋友。

我不知道它是会得到周围的所有文字编码的问题,这是噩梦般的。

有一个RFE,但它是封闭的,不会解决。



Answer 8:

你无法避免文字编码的问题,但Apache的公共-io的有

  • ReaderInputStream
  • WriterOutputStream

注意,这些都是koders.com彼得的答复中提到的库,只链接库,而不是源代码。



Answer 9:

你们是不是要一个的内容写入ReaderOutputStream ? 如果是这样,你就可以更轻松地包裹OutputStreamOutputStreamWriter和写入char从S ReaderWriter ,而不是试图向读者转换为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


Answer 10:

使用警告时WriterOutputStream - 它并不总是处理二进制数据写入到文件中正确/一样有规律的输出流。 我有这一点,我花了一段时间来追查的问题。

如果可以的话,我建议你使用的输出流作为你的基地,如果你需要写的字符串,使用OUtputStreamWriter包装流周围做到这一点。 这是更可靠的文本转换为比周围的其他方式,这可能是为什么字节是WriterOutputStream不是标准Java库的一部分



Answer 11:

您可以使用Cactoos (没有静态方法,仅对象):

  • new InputStreamOf(reader)
  • new OutputStreamTo(writer)

您可以其他方式转换前后过:

  • new ReaderOf(inputStream)
  • new WriterTo(outputStream)


Answer 12:

对于使用正是在java用品的流读出一个字符串。

InputStream s = new BufferedInputStream( new ReaderInputStream( new StringReader("a string")));


文章来源: How to convert a Reader to InputStream and a Writer to OutputStream?
标签: java stream