如何将Java OutputStream与OutputStreamWriter混合使用?

时间:2017-10-02 20:11:50

标签: java

我目前正在使用BufferedWriter将大量文本写入文件。我将BufferedWriter对象传递给我的代码中的各种函数。我现在需要在函数中使用流对象,以便在一个地方使用Base64OutputStream类。我不确定如何更改我的所有代码,而不需要为每个.write()调用将字符串转换为字节,也避免调用像IOUtils.write()这样的辅助函数,因为这听起来会影响性能。

我应该放弃并为字符串写入调用IOUtils.write()函数吗?与对流或编写器write()函数的干净调用相比,代码肯定是丑陋的。

我可以同时创建一个流对象和一个编写器对象并传递它们,根据需要在它们之间切换(听起来它只会崩溃或导致损坏)?

Java是我的第二语言,所以我不知道我可以使用的所有可能的类和函数。我希望代码尽可能可读和可维护。

1 个答案:

答案 0 :(得分:1)

  

An OutputStreamWriter is a bridge from character streams to byte streams

因此,您可以创建OutputStream,将其包装在OutputStreamWriter中,写入OutputStreamWriter会将字符编码为字节并调用相应的OutputStream.write

在这种特定情况下请注意文档说

  

It is mandatory to close the [Base64OutputStream] after the last byte has been written to it, otherwise the final padding will be omitted and the resulting data will be incomplete/inconsistent

依次关闭底层流。因此,如果写入Base64OutputStream不是您的上一次操作,则可能需要关闭并重新打开原始流,使Writer无效。