IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

rendre une classe serializable sans les codes sources


Sujet :

Langage Java

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Points : 295
    Points
    295
    Par défaut rendre une classe serializable sans les codes sources
    Je suis entrain d'utiliser l'api java de beanshell et je suis confronté au probléme suivant :

    Je cherche à serialiser la classe bsh.Interpreter.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		bsh.Interpreter interpreter = new bsh.Interpreter();	
    		serialize(interpreter.getNameSpace() ,"azerty");
    ( serialize est une fonction à moi qui serialise ... )

    CE CODE FONCTIONNE

    mon probléme vient avec la console d'affichage bsh.util.JConsole, celle ci n'est pas serialisable et donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    bsh.util.MyJConsole console = new bsh.util.MyJConsole();
    bsh.Interpreter interpreter = new bsh.Interpreter(console );	
    serialize(interpreter.getNameSpace() ,"azerty");
    NE FONCTIONNE PAS !!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java.io.NotSerializableException: java.io.PipedInputStream
    Je suis ouvert à toute solution.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Points : 295
    Points
    295
    Par défaut
    Mes solutions sont :

    1 récupérer le code source : bsh-2.0b4-src.zip
    --> le site de http://www.beanshell.org/ me met une erreur de lien au téléchargement

    2 Créer une sorte de classe proxy :
    --> Une classe que se comporterait comme JConsole mais qui serait serialisable ou du moins laisserait serialisable l interpreteur ... Je crois que c possible mais je vois pas vraiment comment faire

  3. #3
    Membre actif Avatar de jibbi
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 165
    Points : 205
    Points
    205
    Par défaut
    Salut
    Quel est le type d'information retourner par getNameSpace() ?

    une solution possible est d'encapsuler les informations nécessaire pour recréer l'object dont tu as besion. Spécifier comment doit se faire la serialisation pour cela il faut utiliser Externalizable (extends serializable).


    Ex: la class GeneralPath n'est pas serializable
    (cette classe represente une forme geom. quelconque, implement l'interface Shape)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    public class SuperPath implements Externalizable{
    	transient GeneralPath path; // le mot réservé transient signifie d'ignorer le champ
     
        // doit etre identique 
        public void writeExternal(ObjectOutput out){
        	ArrayList list = new ArrayList();
        	list.add();	// j'ajoute tous les info nécessaire 
        				// doivent être des info serializable...
        				// ici se sont des Object de la classe Point 
        	out.writeObject(list); // enregister le tout
        }
     
        // doit etre identique
        public void readExternal(ObjectInput in){
        	ArrayList list = (ArrayList) in.readObject(); // on récupère les infos
        	// recréer le GeneralPath avec les Point
        }
    }
    SperPath path = new SuperPath();
    [...]
    serialize(path, "???");
    lors de la serialisation writeExternal() et readExternal seront appler.

Discussions similaires

  1. [Débutant] Comment rendre une classe serializable
    Par BasicZX81 dans le forum VB.NET
    Réponses: 4
    Dernier message: 29/09/2014, 19h55
  2. Mise à jour application sans les codes sources
    Par -leternel- dans le forum Droit
    Réponses: 0
    Dernier message: 26/09/2013, 16h20
  3. Réponses: 7
    Dernier message: 01/08/2007, 16h06
  4. [Compiler] Rendre "inaccessibles" les codes sources après compilation
    Par camillechambon dans le forum MATLAB
    Réponses: 3
    Dernier message: 05/07/2007, 17h09
  5. Réponses: 3
    Dernier message: 17/07/2006, 17h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo