在写入数据之前获取BufferedImage的文件大小

时间:2010-06-16 02:54:14

标签: java image

我正在开发一个Java程序,需要通过网络发送图像(最好是PNG格式,尽管我可以在必要时使用其他格式)。当然,这样做的逻辑方法是首先发送PNG图像数据的长度,然后发送数据本身。问题:我在ImageIO或其他任何地方都没有看到任何可以提供图像数据长度的方法。这是否存在于Java 1.6标准库中的某个位置?

我知道我可以把它写到ByteArrayOutputStream并得到结果数组的长度,但在求助之前我想确保我没有遗漏内置的东西。此外,这使得图像数据的额外副本,如果没有必要,我宁愿不这样做。

2 个答案:

答案 0 :(得分:4)

此信息不可用,因为最终内容长度不是事先可预测的。您需要先生成整个图像。


另一方面,您使用的网络协议是什么?您可能想要检查相关协议是否支持以发送数据。

以HTTP为例,您可以使用Transfer-Encoding: chunked。有了这个,您可以使用byte[]缓冲区来发送块。基本上,首先发送一个表示块长度的块头,然后发送一个CRLF,然后发送整个块,然后发送两个CRLF,依此类推,直到流结束,然后发送一个0长度的块头。

您当然也可以使用不同的编码创建自己的专有网络协议,但是如果您使用像HTTP这样的标准协议,那将非常容易,因为有很多API提供或第三方工具,如{ {3}}和java.net.URLConnection,这两者都内置了对以块发送数据的支持。

另见

答案 1 :(得分:0)

当然,如果您使用SVG,这将非常简单。