我正在尝试序列化包含ImageIcon
(实现可序列化)的对象。该图像是ubuntu的示例图像,大小约为320k。
public static void write() {
ImageIcon aww = null;
aww = new ImageIcon("/home/javi/PRUEBA/img.jpg");
ab hue = new ab("hola", "adios", 10, 1111, aww);
ObjectOutputStream oos = null;
FileOutputStream a = null;
try {
a = new FileOutputStream("/home/javi/PRUEBA/mapa.atd");
oos = new ObjectOutputStream(a);
oos.writeObject(hue);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
a.close();
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class ab implements Serializable {
private static final long serialVersionUID = -4377893644898458425L;
String asdf;
String b;
int w;
Integer ab;
ImageIcon a;
public ab(String asdf, String b, int w, Integer ab, ImageIcon ww) {
super();
this.asdf = asdf;
this.b = b;
this.w = w;
this.ab = ab;
a = ww;
}
}
这是我正在使用的代码,我不知道为什么图像大约是320k而输出文件大约是10Mb。如果需要,我可以上传img(/usr/share/unity-2d/warty-final-ubuntu.jpg
)
答案 0 :(得分:3)
存储在ImageIcon中的图像数据可能是一个简单的非压缩位图等效项。一系列的整数,可能。
如果你想有效地使用java序列化,你必须围绕这个类编写一个包装器并将原始二进制文件存储在内存中并将ImageIcon标记为transient
- 并在数据时重建ImageIcon。反序列化后有必要。
答案 1 :(得分:1)
问题是什么。我认为ImageIcon
的序列化方法是将图像视为未压缩的位图。和未压缩的位图比压缩的位图大得多。