BufferedImages serialisieren

Fohnbit

Top Contributor
Hallo,

ich muss mir 2 Listen von Images mitspeichern:
Java:
public transient List<BufferedImage> imagesR = new ArrayList<BufferedImage>();
    public transient List<BufferedImage> imagesL = new ArrayList<BufferedImage>();

private void writeObject(ObjectOutputStream out) throws IOException {
        System.out.println(imagesR.size());
        out.defaultWriteObject();

        out.writeInt(imagesR.size());
        out.writeInt(imagesL.size());

        for (BufferedImage eachImage : imagesR) {
            ImageIO.write(eachImage, "png", out);
        }

        for (BufferedImage eachImage : imagesL) {
            ImageIO.write(eachImage, "png", out);
        }
    }

    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
        in.defaultReadObject();
        int imageCountR = in.readInt();
        int imageCountL = in.readInt();
        System.out.println(imageCountR);
        imagesR = new ArrayList<BufferedImage>(imageCountR);
        for (int i = 0; i < imageCountR; i++) {
            imagesR.add(ImageIO.read(in));
        }
        System.out.println(imageCountL);
        imagesL = new ArrayList<BufferedImage>(imageCountL);
        for (int i = 0; i < imageCountL; i++) {
            imagesL.add(ImageIO.read(in));
        }

    }

Aber beim Laden (oder schon beim speichern) sind nur die von imagesR vorhanden und dann auch noch wild durcheinander.
So befindet sich ein Bild in der imagesL was früher bei imagesR war.
Und alle anderen sind anscheinend leer.

Wie kann ich mehrere BufferedImages speichern und laden mit einer Serializable Klasse?

Danke!
 

Fohnbit

Top Contributor
Hallo,

konnte das Problem nun lösen:
Die "Positionen" im Save File muss ich wohl mit übergeben.
Java:
public transient List<BufferedImage> imagesR = new ArrayList<BufferedImage>();
public transient List<BufferedImage> imagesL = new ArrayList<BufferedImage>();
private void writeObject(ObjectOutputStream out) throws IOException {
        out.defaultWriteObject();
        out.writeInt(imagesR.size());
        out.writeInt(imagesL.size());

        for (BufferedImage eachImage : imagesR) {
            ByteArrayOutputStream buffer = new ByteArrayOutputStream();
            ImageIO.write(eachImage, "png", buffer);
            out.writeInt(buffer.size());
            buffer.writeTo(out);
        }

        for (BufferedImage eachImage : imagesL) {
            ByteArrayOutputStream buffer = new ByteArrayOutputStream();
            ImageIO.write(eachImage, "png", buffer);
            out.writeInt(buffer.size());
            buffer.writeTo(out);
        }
    }

    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
        in.defaultReadObject();
        int imageCountR = in.readInt();
        int imageCountL = in.readInt();
        imagesR = new ArrayList<BufferedImage>(imageCountR);
        for (int i = 0; i < imageCountR; i++) {
            int size = in.readInt();
            byte[] buffer = new byte[size];
            in.readFully(buffer);
            imagesR.add(ImageIO.read(new ByteArrayInputStream(buffer)));
        }

        imagesL = new ArrayList<BufferedImage>(imageCountL);
        for (int i = 0; i < imageCountL; i++) {
            int size = in.readInt();
            byte[] buffer = new byte[size];
            in.readFully(buffer);
            imagesL.add(ImageIO.read(new ByteArrayInputStream(buffer)));
        }
    }
 

Thallius

Top Contributor
Ich würde Images nicht serialisien auch wenn es sicherlich irgendwie geht. Aber ich würde jedes Image einzeln als jpg oder png speichern. alleine schon wegen dem Speicherplatz und der Flexibilität.

Gruß

Claus
 

mrBrown

Super-Moderator
Mitarbeiter
Ich würde Images nicht serialisien auch wenn es sicherlich irgendwie geht. Aber ich würde jedes Image einzeln als jpg oder png speichern. alleine schon wegen dem Speicherplatz und der Flexibilität.
Ob die alle einzeln oder zusammen gespeichert sind, dürfte vom Speicherplatz keinen Unterschied machen, eher dürfte man welchen sparen...
 

Ähnliche Java Themen

Neue Themen


Oben