Sérialisation

Signaler
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
-
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
-
Salut :

J'ai un problème de sérialisation avec Java. J'ai créé deux programmes qui doivent échanger des données via la sérialisation des objets.
Les deux classes implémentent l'interface "Serializable" mais lorque j'éxecute ces deux programmes une exception "NotSerializableException" de lève.

En fait, j'ai un membre de type "Image" que je veux transmettre à l'autre programme.

10 réponses

Messages postés
194
Date d'inscription
vendredi 17 février 2006
Statut
Membre
Dernière intervention
1 mai 2009
48
Bonjour,
en regardant la javadoc, je vois que Image n'implemente pas l'interface Serializable, elle ne peut donc etre sauvegardée avec la Serialization. Il doit exister une astuce... que  je ne connais pas :(

- [TucoBouch] -
Messages postés
764
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
8 mars 2011
8
il faut que tous le sous objets de tes objets soient sérializables.
Par exemple les thread et composants swing ne le sont pas
tu peux mettre transient devant la déclaration d un attribut que tu peux ou ne veux pas serialiser !
++ Toinou
Messages postés
764
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
8 mars 2011
8
lol turbocouch on a posté en mm tps !!
ben Image fait parti du package awt donc je pense pas qu elle soit serializable comme ca !!
au pire tu peux essaye d utiliser un truc du genre
class MyImage extends Image implements Serializable
mais franchement j suis quasi sur que ca passera pas (j ai déjà rencontré + ou - ce genre de pb)
++ Toinou
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,

Surtout ne cherche pas a rendre image serializable tu vas te faire chier pour rien vu qu'il faut limite rendre la terre entiere serializable pour Image, mais tu peux rendre sont contenu serialisable soit le tableau de pixel de l'image ce qui reste le plus simple faire apres pour refaire ton image depuis ce tableau rien de plus simple Toolkit.getDefaultToolkit().createImage(byte [] data)

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
37
Salut :

Comment faire pour extraire un tableau de pixel de l'image?
Je cherche une fonction qui retourne "byte []" pourque je puisse l'utiliser en tantque paramètre de la fonction  Toolkit.getDefaultToolkit().createImage(byte [] data)

Et merci ...
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
37
Salut :

J'ai trouvé la méthode "java.awt.image.BufferedImage.getData ()" qui retourne un objet "Raster".
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,

deux solutions pour ce faire

1 depuis un fichier :
public static Image createImage(InputStream in) {
        try {
            byte buffer[] = new byte[in.available()];
            int n=0, offset=0;
            while(true) {
                int i = in.available();
                n=in.read(buffer, offset, i);
                if (n<=0 || n == i) {
                    if (n!=-1)  offset+=n;
                    break;
                }
                offset+=n;
            }
            in.close();
            return buffer;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
l'utilisation :
byte [] image = createImage(new FileInputStream(new File("image.png")));
Image img = Toolkit.getDefaultToolkit().createImage(image);

2 depuis une image : la solution est d'utiliser PixelGrabber

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,

ouais a voir pour le raster vu que le desavantage de PixelGrabber c'est que pour lui le tableau de pixels c'est un int[]

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
37
Salut :

Je ne suis pas en train de manipuler une image stockée sur disque mais une image en mémoire.  (un objet de la classe BufferedImage)
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,

Sinon autre possibilité serait de passer par ImageIO exemple (trouvé chez sun)

staticbyte[] encode(BufferedImage image) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
ImageIO.write(image, "jpeg", out);
return out.toByteArray();
}

static BufferedImage decode(byte[] data) throws IOException {
return ImageIO.read(new ByteArrayInputStream(data));
}

comme ca tu serialise et deserialise la data (byte[]) de ton image

Sinon tu peux aussi passer par JAI(Java Advanced Imaging) pour voir

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA