【问题标题】:How can I mix Java OutputStream with OutputStreamWriter?如何将 Java OutputStream 与 OutputStreamWriter 混合使用?
【发布时间】:2017-10-02 20:11:50
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java


    【解决方案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 无效。

    【讨论】:

    • 我错过了关闭 Base64OutputStream 的要求。既然是这种情况,我需要将 base64 数据写入临时文件,然后将其写入最终输出文件(作为标签内带有 base64 的 XML 文件),我可以返回使用支持写入的文件编写器直接串。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2012-12-13
    • 2021-12-27
    • 1970-01-01
    • 2018-11-19
    • 2018-07-15
    • 1970-01-01
    • 2020-02-02
    • 2018-01-25
    相关资源
    最近更新 更多