[JAVA] invalid stream header,na verkleinen Image met ImageIO

Pagina: 1
Acties:

  • the12be
  • Registratie: November 2000
  • Laatst online: 16-05 17:48
Ik zit met het volgende probleem.

Ik heb een Image welke ik wil omzetten naar een byte array zodat ik deze kan versturen over het netwerk. Als ik dit op deze manier doe dan gaat het prima:

Java:
1
2
3
4
ByteArrayOutputStream bout = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bout);
out.writeObject(plaatje);
byte[] plaatjeArray = bout.toByteArray();


Het nadeel is dat dan het plaatje erg groot is (zo'n 300k).

Na wat google werk blijkt dat ImageIO hier een oplossing voor heeft, dus heb ik dit gedaan:

Java:
1
2
3
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write( (BufferedImage) plaatje, "JPG", baos);
byte[] plaatjeArray = baos.toByteArray();


Dit lijkt ook goed te gaan, de array is een stuk kleiner (rond de 3k), maar bij het terughalen van de Image krijg ik nu een error. Namelijk:
java.io.StreamCorruptedException: invalid stream header

de code die ik gebruik om de byte array om te zetten naar een image is als volgt:
Java:
1
2
3
ByteArrayInputStream bin = new ByteArrayInputStream(plaatjeArray);
ObjectInputStream in = new ObjectInputStream(bin);
ImageIcon plaatje =  (ImageIcon) in.readObject();


De Exception wordt gegeven door deze code: ObjectInputStream in = new ObjectInputStream(bin);
maar, dit lijkt me gewoon goed.
Nu heb ik geen flauw idee meer wat nu het probleem is, en kan er op het internet / got, ook geen oplossing voor vinden.

Het zal vast een lullig foutje zijn, maar ik zie het niet.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:04

.oisyn

Moderator Devschuur®

Demotivational Speaker

Nogal logisch, je schrijft toch ook niet weg via een ObjectOutputStream? Het lezen via een ObjectInputStream zal dan ook niet lukken :)

Ik ken de java api niet goed, maar het lijkt me dat er ook wel een ImageIO.read() functie is, die waarschijnlijk een BufferedImage teruggeeft oid.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • the12be
  • Registratie: November 2000
  • Laatst online: 16-05 17:48
Arg, domdomdom.

Het moet idd met de read functie. Probleem opgelost.

voor het nageslacht. (mocht er iemand ook nog eens zo'n STOMME fout maken :P )
Java:
1
2
ByteArrayInputStream bin = new ByteArrayInputStream(plaatjeArray);
BufferedImage plaatjeNew = ImageIO.read(bin);