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

Java-为什么我的Serializable对象文件如此大?

  •  4
  • StumpedCoder  · 技术社区  · 11 年前

    所以我有一个图像,叫做 square.png ,大小约为3.7kB。我将其读入BufferedImage,如下所示:

    BufferedImage img = ImageIO.read("square.png");
    

    此时,我尝试将几个不同的对象写入磁盘。

    ObjectOutputStream stream = new ObjectOutputStream(new FileOutputStream("square_out.data"));
    

    我尝试用ImageIcon包装图像: stream.writeObject(new ImageIcon(img));

    我尝试了一个与图像像素尺寸相同的2D阵列(800x600)。

    我尝试将该数组包装在一个实现Serializable的自定义类中并编写它。

    所有上述技术都导致 square_out.data 大小约为1.9MB。考虑到原始图像只有几千字节,这是巨大的。这也很奇怪,因为每个人的尺寸完全相同。对此有什么合理的解释吗?我想存储很多这样的文件,所以荒谬的文件大小令人烦恼。

    1 回复  |  直到 11 年前
        1
  •  5
  •   aioobe    11 年前

    因为 BufferedImage 在内部以未压缩格式存储图像(这就是序列化的内容)。

    使用 ImageIO.write 以压缩格式保存图像。