代码之家  ›  专栏  ›  技术社区  ›  David Z

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

  •  3
  • David Z  · 技术社区  · 15 年前

    我正在研究一个Java程序,需要通过网络发送一个图像(最好是PNG格式,但如果需要的话,我可以使用另一种格式)。当然,这样做的逻辑方法是,首先发送PNG图像数据的长度,然后发送数据本身。问题:我看不到 ImageIO 或者其他任何能给我图像数据长度的地方。这是否存在于Java 1.6标准库中的某个地方?

    我知道我可以把它写给 ByteArrayOutputStream 并得到结果数组的长度,但在使用之前,我想确保不丢失内置的东西。除此之外,这会额外复制图像数据,如果不需要的话,我宁愿不做。

    2 回复  |  直到 15 年前
        1
  •  4
  •   Community Mohan Dere    8 年前

    此信息不可用,因为预先无法准确预测最终内容长度。您需要首先生成整个图像。


    另一方面,您使用的是什么网络协议?您可能需要检查所讨论的协议是否支持将数据发送到 .

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

    当然,你也可以用不同的编码来发明你自己的专有网络协议,但是如果你使用像HTTP这样的标准协议,毕竟这是很容易的,因为有很多API提供的或者第三方的工具可以实现 java.net.URLConnection Apache HttpComponents Client 这两种方法都内置了对以块形式发送数据的支持。

    也见 :

        2
  •  0
  •   Meiscooldude    15 年前

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

    推荐文章