Image-Objekt serialisieren?

Hallo,

ich habe das Problem, dass ich ein java.awt.Image irgendwie über einen WebService verschicken muss, d.h. ich muss es irgendwie in einen serialisierbaren Typ casten. Was bietet sich da an, wie könnte man das machen? Ich habe von diesem Thema leider nur sehr wenig Ahnung… Das ganze muss dann hinterher auch wieder den umgekehrten Weg machen, d.h. vom serialisierbaren Typ in ein Image-Objekt umgewandelt werden.

Kann mir jemand weiterhelfen?

Grüße,
Nina

Moin

ich habe das Problem, dass ich ein java.awt.Image irgendwie
über einen WebService verschicken muss, d.h. ich muss es
irgendwie in einen serialisierbaren Typ casten.

Kanns du javax.imageio.ImageReader/Writer verwenden ? (geht ab JDK 1.4.1)

cu

Hi,

mir steht hier 1.4.2 zur Verfügung, sollte also gehen.

Grüße,
Nina

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Moin

mir steht hier 1.4.2 zur Verfügung, sollte also gehen.

Du hast ein BufferedImage/RenderedImage-Object ? Nein ? (BufferedImage BI = ImageIO.read(new File(„Datei-mit-Bild“)); , oder nochmal fragen)

Du brauchst irgendwas in dem die Bild-daten gespeichert werden sollen:

ByteArrayOutputStream buffer = new ByteArrayOutputStream();

Da schreibt man jetzt das Bild rein:

ImageIO.write(RenderedImage im, „jpg“, buffer);

byte[] BILD_DATEN = buffer.toByteArray();

Das Array müsste man per ObjectStreams verschicken können (evtl nochmal in eine andere Klasse einpacken, so dass der Name des Bildes gleich mit verschickt wird). Auf der anderen Seite:

ByteArrayInputStream BIN = new ByteArrayInputStream(BILD_DATEN);
BufferedImage image = ImageIO.read(BIN);

Noch ein paar Takte zu ObjectStreams:

  1. Die sind realtiv langsam.

  2. Die funktionieren nur wenn auf allen beteiligten VM exakt die gleichen class-Dateien liegen.

  3. Bei grossen Bäumen (bei Objecten die auf viele Objecte verweisen) können sie die JVM töten (Bufferoverflow)

  4. Wenn man ein Object mehrmals verschickt kommt immer nur die erste „Version“ an, der Rest geht verloren. (ausser man ruft zwischen den einzelnen writes reset() auf, was den Stream aber stark einbremst)

Wie du siehst sind ObjectStreams nicht gerade eine saubere Sache. Viel Glück damit.

cu

Hi,

vielen Dank erstmal :smile:, ich werde das Anfang nächster Woche mal testen!

Nina