Java-为什么我的Serializable对象文件大小这么大



所以我有一个名为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的自定义类中并编写它。

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

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

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

最新更新