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

时间:2015-03-26 08:49:48

标签: java image serialization filesize

所以我有一个名为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));

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

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

以上所有技术都产生了square_out.data,大小约为1.9 MB。考虑到原始图像只有少量千字节,这是巨大的。它也很奇怪,因为每个的大小完全相同。对此有什么合理的解释/有没有解决方法?我想存储很多这些,所以荒谬的文件大小很麻烦。

1 个答案:

答案 0 :(得分:5)

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

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