-1

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 になる理由がわかりません。必要に応じて、画像をアップロードできます ( /usr/share/unity-2d/warty-final-ubuntu.jpg )

4

2 に答える 2

3

ImageIcon に格納されている画像データは、おそらく圧縮されていない単純なビットマップに相当します。おそらく、intの配列。

Java シリアライゼーションを効率的に使用する場合は、このクラスのラッパーを作成し、元のバイナリ ファイルをメモリに格納し、ImageIcon をtransient- としてマークし、必要に応じてデシリアライゼーション後にデータから ImageIcon を再構築する必要があります。

于 2013-01-25T09:38:07.810 に答える
1

どうしたの。のシリアル化方法はImageIcon、画像を非圧縮ビットマップとして扱うと思います。圧縮されていないビットマップは、圧縮されたビットマップよりもはるかに大きくなります。

于 2013-01-25T09:37:13.720 に答える