【问题标题】:How to buffer OutputStream without any buffer limits in Java?如何在 Java 中缓冲没有任何缓冲区限制的 OutputStream?
【发布时间】:2012-06-14 19:51:53
【问题描述】:

这个案例有点复杂,希望能简化一下。

当我收到PrintStream 我应该输出一些数据时,我的任务就开始了。然而整个任务是计算+打印,当我完成计算时我可以打印。所以这可能是 2-pass 任务,但我希望是 1-pass。

为了实现这一点,我想创建一些输出缓冲区,进行计算和打印(到缓冲区),然后从缓冲区打印到真正的输出流。

到目前为止一切顺利,问题是我无法找到合适的缓冲类 -- BufferedOutputStream 如果我理解正确,当缓冲区已满时开始从缓冲区写入。我必须对其进行更严格的控制——在我明确表示之前不要写入实际输出。

问题 -- 是否有适合此任务的课程?

【问题讨论】:

  • 您可以在 BufferedOutputStream 上调用 flush

标签: java buffer outputstream


【解决方案1】:

您可以使用 ByteArrayOutputStream 作为缓冲区。此流写入的字节数组会自动放大以容纳您写入的所有内容。

完成生成输出后,只需调用writeTo 方法将缓冲区的内容写入输出流,该输出流会写入某个实际设备。

更多详情见http://docs.oracle.com/javase/6/docs/api/java/io/ByteArrayOutputStream.html

【讨论】:

  • 输出流不是缓冲区。
  • 我不明白你的意思。一块内存可以用作缓冲区。 ByteArrayOutputStream 管理一块内存。因此,它可以用来实现缓冲区。
  • "此流写入的字节数组会自动放大以容纳您写入的所有内容。"这部分是答案,非常感谢您的帮助。
【解决方案2】:

来自javadoc of the flush method

刷新这个缓冲的输出流。这会强制任何缓冲输出 要写入底层输出流的字节。

【讨论】:

  • 我不是在问如何刷新缓冲区,我是在问如何防止自动刷新?还是BufferedOutputStream中没有自动刷新之类的东西?
猜你喜欢
  • 2018-05-15
  • 2022-11-11
  • 1970-01-01
  • 1970-01-01
  • 2014-09-11
  • 1970-01-01
  • 2014-10-10
  • 1970-01-01
  • 2011-06-15
相关资源
最近更新 更多