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

Stu*_*der 4 java serialization image filesize

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

BufferedImage img = ImageIO.read("square.png");
Run Code Online (Sandbox Code Playgroud)

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

ObjectOutputStream stream = new ObjectOutputStream(new FileOutputStream("square_out.data"));
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

aio*_*obe 5

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

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