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
以压缩格式保存图像。
所以我有一个名为 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
以压缩格式保存图像。