Devinette Serialisation - Java - Programmation
Marsh Posté le 11-03-2017 à 12:23:53
sylargh a écrit : Hello, |
La réponse est en fait dans la question :
Citation : |
Dans la mesure où tu ne peux pas modifier directement l'objet, tu es forcément obligé de modifier l'objet sérialisé. De plus, on te donne une petite indication en l.33
Citation : |
Maintenant, il ne te reste plus qu'à voir comment retrouver la valeur de la vitesse dans l'objet sérialisé et à la modifier
Marsh Posté le 12-03-2017 à 19:25:51
Bonjour merci de votre réponse,
J'admet que je n'ai jamais vu la sérialisation et les diapo du profs ne m'aident pas vraiment car y a très peu d'exemple de code,
Ici pour récuperer les valeurs je peux utiliser la ligne suivante :
printByteArray(yourBytes) pour récupérer la valeur de v mais ducoup :
1. Si je modifie avant l'envoie de l'objet serializé , qu'elle différence si je changerai directement la valeur de v au début?
2. Il suffit de changer la taille du tableau "yourBytes" pour changer la valeur de V?
3. Je suis totalement dans le faux et je m'enfonce encore plus
Habituellement je programme en C++, et je n'ai jamais vu de serialisation, Auriez vous un exemple, ou une piste car je suis totalement perdu sur ce coup
Cdlt
Marsh Posté le 12-03-2017 à 21:52:04
sylargh a écrit : Bonjour merci de votre réponse, |
Si je ne dis pas de bêtise, le principe de sérialisation est de coder un objet en mémoire sous forme d'octets, pour ensuite être transmis à un processus par réseau :
Ensuite, dans le processus recevant les données :
Pour répondre à l'énoncé, tu ne peux pas modifier directement l'objet en appelant la méthode accelerer() : en effet, elle est codée de telle sorte que tu ne peux pas fixer une valeur supérieure à 19.
Par contre, ce que tu peux faire, c'est modifier le tableau d'octets que tu vas transmettre vu qu'il n'y a aucun contrôle : c'est ce que ton professeur veut te montrer par cet exercice.
Pour cela, je ne savais pas trop où chercher, donc j'ai affiché directement le tableau, puis j'ai repéré à quel indice était la vitesse : en fin de tableau.
En espérant avoir éclairci certains points
Marsh Posté le 13-03-2017 à 21:04:43
Donc si j'ai accès à la valeur vitesse en fin de tableau, je peux la modifié en vitesse=1?
de cette façon si ma valeur v=32 767 (Borne max int)
v+vitesse=-32 767 donc sa reste en dessous de 20,
et v tout seul est supérieur à 20 donc sa envoie le message de nouveau record. Est ce cela? Sinon je crois que je vais abandonner , car je le rend demain x)
Merci en tout cas
Marsh Posté le 13-03-2017 à 21:42:21
Ducoup...
j'ai mit
Code :
|
j'ai créer une méthode :
Code :
|
et je l'appel précédemment
Code :
|
Je n'ai pas réussit à afficher le tableau, sa m'embête vraiment d'être passer au Java car j'ai des erreurs de compilation bizarre et je suis pas adepte d'Eclipse, ducoup pour cette réponse qui peut être totalement décalé ou folle si ce n'est vraiment pas sa, je me suis référé à votre dernier post :" l'indice de vitesse est a la fin du tableau", et c'est la seule idée qui me suis venu
Cdlt
Après ce TP je retourne C++
Marsh Posté le 13-03-2017 à 23:33:06
sylargh a écrit : Donc si j'ai accès à la valeur vitesse en fin de tableau, je peux la modifié en vitesse=1? |
Vu que tu ne peux pas modifier directement la vitesse dans ton objet Java, tu modifies la vitesse dans ton tableau d'octets. Donc cela donne :
Code :
|
sylargh a écrit : Ducoup...
|
Pour afficher ton tableau, soit tu fais une boucle, soit tu utilises la méthode Arrays.toString() :
Code :
|
Code :
|
Marsh Posté le 10-03-2017 à 21:41:04
Hello,
j ai un tp avec plusieurs exercice par rapport aux attaques de securite en JAVA,
Parmis ceux la, il y en a un qui m embête beaucoup,
Voici 3 classes
Le but de l exercice est de faire en sorte que :
À la fin de la partie, l’objet voiture est sérialisé et envoyé au serveur (jeu.java). Ce dernier vérifie si la vitesse atteinte dépasse 20 km/h. Si oui, la ligne « c'est un record» est affiché à l’cran.
Votre première objectif est de faire afficher cette ligne dans la console d’exécution sans modifier les classes jeu.java ou Voiture.java d’aucune façon (puisque vous supposer qu’elles sont exécuté sur le serveur). Vous devez simplement modifier l’objet sérialisé pour qu’il contienne une valeur « impossible », puis envoyer cet objet au serveur.
Ce que j ai compris :
Sur la ligne 3, je dois changer la valeur que contient mon objet voiture qui est serialisé par la suite de manière a ce que dans jeu.java vitesse+v soit inferieur a 20 pour pas faire appel a la fonction crash()
Mais que "v" seulement soit superieur a 20 pour que le record s affiche. Sauf que je ne dois effectuer des modifications uniquement dans la classe exercice 1.
Je n ai aucun setVitesse dans la classe voiture pour modifier la valeur de vitesse qui est initalisé a 0.
J ai pensé pouvoir jouer avec les bornes min et max d un int "-32 767" lorsque v+vitesse sont associés, puis passer en valeur positive une fois que vitesse serait enlever. Mais je me retrouve encore dans une impasse car mon iterateur vitesse=0. Et si je ne dis pas de betise je n effectue la boucle qu une seule fois.
Si vous avez une idee de la resolution du probleme je serais ravis
cldt