我正在开发一个Java程序,需要通过网络发送图像(最好是PNG格式,尽管我可以在必要时使用其他格式)。当然,这样做的逻辑方法是首先发送PNG图像数据的长度,然后发送数据本身。问题:我在ImageIO
或其他任何地方都没有看到任何可以提供图像数据长度的方法。这是否存在于Java 1.6标准库中的某个位置?
我知道我可以把它写到ByteArrayOutputStream
并得到结果数组的长度,但在求助之前我想确保我没有遗漏内置的东西。此外,这使得图像数据的额外副本,如果没有必要,我宁愿不这样做。
答案 0 :(得分:4)
此信息不可用,因为最终内容长度不是事先可预测的。您需要先生成整个图像。
另一方面,您使用的网络协议是什么?您可能想要检查相关协议是否支持以块发送数据。
以HTTP为例,您可以使用Transfer-Encoding:
chunked
。有了这个,您可以使用byte[]
缓冲区来发送块。基本上,首先发送一个表示块长度的块头,然后发送一个CRLF,然后发送整个块,然后发送两个CRLF,依此类推,直到流结束,然后发送一个0长度的块头。
您当然也可以使用不同的编码创建自己的专有网络协议,但是如果您使用像HTTP这样的标准协议,那将非常容易,因为有很多API提供或第三方工具,如{ {3}}和java.net.URLConnection
,这两者都内置了对以块发送数据的支持。
另见:
答案 1 :(得分:0)
当然,如果您使用SVG,这将非常简单。