Java - 为什么我的可序列化目标文件这么大?

Java - Why is my Serializable object file size so large?

所以我有一个名为 square.png 的图像,大小约为 3.7 kB。我这样将它读入 BufferedImage:

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

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

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

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

我尝试了一个与图像像素尺寸 (800x600) 相同大小的二维数组。

我尝试将该数组包装在实现可序列化的自定义 class 中并编写它。

所有上述技术产生了一个 square_out.data 大小约为 1.9 MB。考虑到原始图像只有几千字节,这是巨大的。这也很奇怪,因为每个尺寸都完全相同。 this/is 有什么合理的解释吗?我想存储很多这些,所以荒谬的文件大小很麻烦。

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

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