C'est un problème connu avec WriteObjet et ReadObjet (sérialisation d'objet). La solution a été publié dans ce forum mais je ne sais plus par qui. Fait un recherche...
C'est un problème connu avec WriteObjet et ReadObjet (sérialisation d'objet). La solution a été publié dans ce forum mais je ne sais plus par qui. Fait un recherche...
tu peux expliquer pourquoi ça vient de ObjectInputStream ?? Moi je ne vois pas, débutant, mais ayant déjà fait une appli réseau de ce type, je n'ai jamais au de tel problème.
Moi j'avais déjà fait des recherches et voilà:
Le sujet ou message que vous recherchez n'existe pas
Donc oui je veux bien la solution, parce que la création d'un clone ne marche pas, or je ne vois pas bien ce que je peux faire de plus pour créer une nouvelle instance d'objet, surtout que j'ai besoin de garder mon objet de base qui est modifié par plusieurs classes...
essai peut etre de faire un truc comme ca:
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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 public class Matrice implements Sera... { Variable var1; Variable var2; Variable var3; ... public Matrice() { ... } public Matrice(Matrice m) { ... var1 = m.var1; var2 = m.var2; var3 = m.var3; // faire ca pour toute tes variables } /* * * Tes méthode ... * */ }
et avant d'envoyer ton objet tu fais:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 writeObject(new Matrice(maVieilleMatrice));
Cette méthode a l'air de fonctionner, mais je trouve pas ça super rigoureux en terme de conception, je trouve ça même très bizarre, et je comprends pas bien l'intérêt du mécanisme qui se trouve derrière...
Sur ce je vais essayer de continuer, mais je doute que cette solution ne soit pas sans problèmes...
Merci à tous!
Flux d'envoi objet cote serveur : "Ok, tiens-toi pret je t'envoie l'objet Ms serialise. Au fait c'est la meme instance que la precedente, juste ses membres ont change."tu peux expliquer pourquoi ça vient de ObjectInputStream ??
Flux de reception objet cote client : "Oh mais j'ai deja recupere cette instance avant et a l'epoque j'avais cree un objet Mc. Hum je vais pas m'embeter a allouer un nouvel objet en memoire juste pour ca : je vide le flux et je retourne la reference Mc de ce que j'ai deserialisee auparavant".
Et voila pif-paf le client ne recupere pas les membres mis-a-jour
Encore une fois ce n'est que theorique mais ca ressemble bien a ce qu'il t'arrive.
Instance identique = pas chercher a comprendre = on garde la meme.
Quand je disais de bien faire gaffe aux effets non-desires des optimisations dans une discussion precedente..... gnack gnack gnack
Peut être une erreur ! mais je suis pas sûr, tu déclares ta Matrice après ta class anonyme interne en plus il n'y a pas de modificateur d'accès !!, il me semble d'ordinaire que ça se place au tout début du programme les variables d'instance (peut-être une question d'habitude )?!
Je comprends pas trop ta déclaration de variable en fait !
tu pourras nous dire si tu trouves stp??
Merci ./
Ben cette méthode marche.Envoyé par Linio
Et le mécanisme expliqué par bouye est bien ce qui a l'air de se produire.
Je reste on ne peut plus dubitatif par le côté intéressant de cette optimisation car un flux de fichier en terme de conception (pour l'avoir utilisé plusieurs fois que ce soit en réseau ou autre), se voit souvent passer les mêmes objets.
Bref si une vraie réponse pouvait être apportée quant à ce mécanisme précis ce serait chouette.
(Par contre j'ai pas pigé le problème de ma déclaration de variables... : )
comme elle a été déclarée, c'est une variable d'instance ?! je disais juste qu'en général elle se place au tout début de la classe en premier ?! de plus il me semble plus "clair" de lui affecter un modificateur d'accès (public, private, static...), je ne sais pas lequel est par défaut.
Code : Sélectionner tout - Visualiser dans une fenêtre à part []Data matrix[][] = new Data[20][20]; [/]
Perso j'ai pas compris où était le problème sinon dans ton poste, mais si ton problème est résolu, c'est l'essentiel...
C'est juste pour des questions de lisibilité principalement (moi c'est ce que je préfère).je disais juste qu'en général elle se place au tout début de la classe en premier ?!
D'autres préfèrent déclarer les variables près des méthodes où elles sont utilisée pour grouper par fonctionalités au contraire (voir le code source de certaines classes du JDK).
package protected tout simplement et c'est parfois mieux que protected car encore plus restrictif : accessible à tout le package mais pas en dehors. (rappel : protected = accessible à tous le package + sous-classes dans les autres packages)je ne sais pas lequel est par défaut
public >= protected >= rien (package protected) >= private
http://java.sun.com/docs/books/jls/s...oc.html#104285
Mais elle est déclarée au début avec les autres variables!
Et de fait le choix de friendly est voulu.
Cette méthode ne fonctionne pas pour moi, avez vous une autre solution ?Envoyé par soad
Je galère trop la !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager