代码之家  ›  专栏  ›  技术社区  ›  Trick

响应输出流内容长度?

  •  9
  • Trick  · 技术社区  · 16 年前

    我正在通过各种方法编写输出流。在关闭它之前,我如何找出输出流的内容长度?

    3 回复  |  直到 6 年前
        1
  •  18
  •   Jon Skeet    12 年前

    最简单的方法可能是用另一种包装 OutputStream

    CountingOutputStream Apache Commons IO .

    编辑:正如其他地方所指出的,如果这是针对HTTP的,而您的客户端还没有对完整数据进行缓冲(在这种情况下,我会想 之前 写入数据。在某些情况下,您可能会发现它会工作到一定大小(客户端缓冲区),然后失败。在这种情况下,大卫的解决方案将是恰当的。

        2
  •  9
  •   David    16 年前

    问题是,在开始向输出流写入任何数据之前,必须在响应标头中设置内容长度。所以你的选择是:

    1. 根据一开始生成数据的成本,您可以生成一次数据,然后将其丢弃以获取计数,然后再次生成。猜测这不太可能是一个现实的解决方案。
    2. 接受这样一个事实,即您将无法在响应标头中报告内容长度。
        3
  •  2
  •   Dmitry    16 年前

    您可以考虑写入自己的ByteArrayOutputStream,并在最后将其刷新到响应输出流中。

    推荐文章