Java 响应输出流内容长度?
我正在通过各种方法编写输出流。在关闭outputstream之前,我如何确定outputstream的内容长度 > P>您可以考虑编写自己的BytRayOutPutsFrand并将其刷新到响应输出流的末尾。Java 响应输出流内容长度?,java,response,outputstream,Java,Response,Outputstream,我正在通过各种方法编写输出流。在关闭outputstream之前,我如何确定outputstream的内容长度 > P>您可以考虑编写自己的BytRayOutPutsFrand并将其刷新到响应输出流的末尾。最简单的方法可能是将其封装在另一个 OuttoStult实现中,该实现转发所有写入请求,但保持内部计数器。那你就写下来吧。实施起来应该不会太难——事实上可能已经有了 编辑:仅仅猜测一个合理的名称(CountingOutputStream)就在中得到了一个实现 编辑:如其他地方所述,如果这是针对
最简单的方法可能是将其封装在另一个<代码> OuttoStult实现中,该实现转发所有写入请求,但保持内部计数器。那你就写下来吧。实施起来应该不会太难——事实上可能已经有了
编辑:仅仅猜测一个合理的名称(CountingOutputStream
)就在中得到了一个实现
编辑:如其他地方所述,如果这是针对HTTP的,而您的客户端尚未对完整数据进行缓冲(在这种情况下,我认为它可以计算出内容长度),则可能会出现问题,因为在写入数据之前需要写入长度。在某些情况下,您可能会发现它会工作到一定的大小(客户机缓冲),然后失败。在这种情况下,David的解决方案是合适的。问题是,在开始向输出流写入任何数据之前,必须在响应头中设置内容长度。因此,您的选择是:
然而,这将非常占用内存,因为byte[]的每个字节都会占用JVM的一个字节的内存!我必须开始不要忘记Apache Commons!!!我会试试。它能在大数据上工作吗?在将任何内容写入响应的outputStream之前,应该设置“Content length”标题,就像David一样noted@AndreyRegentov:这取决于上下文是什么。如果输出被写入的内容缓冲,那么就可以了。我们不一定知道这是HTTP,尽管这是一个合理的赌注。“我将用一些想法修改我的答案。”JonSkeet完全同意上下文。我是通过谷歌搜索HTTP来到这里的,无意中假设问题是关于HTTP(响应,内容长度),尽管问题中没有任何内容。@AndreyRegentov:看起来很有可能:)无论如何,我添加了一点,并对David的答案投了赞成票。