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

Entrée/Sortie Java Discussion :

[Array][String]byte[]


Sujet :

Entrée/Sortie Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 34
    Points : 35
    Points
    35
    Par défaut [Array][String]byte[]
    Bonjour.
    Comme une belle image vaux mieux qu'un mauvais discour...
    la source de mon probleme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            public ChatSender (byte[] b) {
                  this.rcv = (int) b[0];
     
                  byte[] nameBytes = new byte [b.length-1];
                  System.arraycopy(b, 0, nameBytes, 0, nameBytes.length);
                  this.name = new String(nameBytes);
     
                  byte[] mailBytes = new byte [b.length-1];
                  System.arraycopy(b, 0, mailBytes,0 , mailBytes.length);
                  this.mail = new String(mailBytes);
             }
    le probleme est que nameBytes et mailBytes est le meme objet
    chatSender.rcv = bien ce qu'il doit egaler.
    ChatSender.name = nameBytesmailBytes tout comme ChatSender.mail qui donne au final la meme String : nameBytesmailBytes
    Ce que je cherche a faire c'est biensur que ChatSender.name me donne le nom "name" tout comme ChatSender.mail ...(mais vous avez compris)
    Donc auriez vous une piste, ou mieux une solution?
    Merci.

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 220
    Points : 266
    Points
    266
    Par défaut
    Je suis pas sur d'avoir tout compris, mais je m'essaye quand meme...

    J'ai un doute mais quand tu executes les lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System.arraycopy(b, 0, nameBytes, 0, nameBytes.length);
    System.arraycopy(b, 0, mailBytes,0 , mailBytes.length);
    tu ecris dans namesbytes et dans mailBytes un nombre d'octets etant dans b a partir de la position de départ.

    Genre si tu as dans b la chaine MonNomAMoi, et que nameBytes fais une taille de 8, tu vas avoir dans nameBytes MonNomAM.

    De la meme maniere, si mailBytes fait une taille de 8, tu auras la meme chose... quand tu fais ta copie, de b dans nameBytes, ou dans mailBytes, System.arraycopy n'efface pas les octets copiés dans b, il est normal que tu aies la meme chaine...

    Ou sinon, j'ai rien compris a ton probleme...

    On peut savoir ce qu'il y a dans rcv, et ce que tu souhaites récupérer précisément dans mailBytes et nameBytes ?

  3. #3
    Membre habitué Avatar de soulhouf
    Inscrit en
    Août 2005
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 213
    Points : 133
    Points
    133
    Par défaut
    Citation Envoyé par ghorgor
    On peut savoir ce qu'il y a dans rcv, et ce que tu souhaites récupérer précisément dans mailBytes et nameBytes ?
    moi aussi je voudrais bien le savoir.
    sinon en Java il y a des conventions qu'il vaut mieux respecter:
    - les noms des variables, attributs et fonctions commencent toujours par une lettre minuscule.
    - les noms des classes commencent par une majuscule.
    autre remarque: pourquoi tu récuperes un byte et non directement un String?
    "Ce qui ne nous tue pas nous rend plus fort"
    Nietzsche

  4. #4
    Membre confirmé Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Points : 508
    Points
    508
    Par défaut
    très certainement parce que son format de réception est un tableau de bytes .... genre en provenance d'un read(buf) d'un flux quelconque
    Toute vérité est bonne à entendre, même si toutes les vérités ne sont pas bonnes à dire.
    Rien ne sert de partir à point, il vaut mieux courir .

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 34
    Points : 35
    Points
    35
    Par défaut
    Bonjour
    je pense respecter les conventions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class ChatSender {
     
            public static int rcv = -1;
            public static String mail ;
            public static String name;
     
            public ChatSender (int rcv, String name, String mail) {
                  this.rcv = rcv;
                  this.name = name;
                  this.mail = mail;
            }
    la suite etant le bout de code du premier pst
    Sinon Ghorgor tu as le doigt sur le noeud (Gordien) du probleme
    je ne peu pas definir une taille pour le nom c'est un nom utilisateur ou groupe d'utilisateur pas plus que la taille de message( en fait t'as le droit de t'appeler comme tu veux et de dire ce que tu pense)
    pour en revenir au probleme j'arrive pas a lui faire ecrire dans l'ordre et distinctement le numero(qui est en code perso) une chaine( qui represente un nom) puis une autre chaine( qui est le corp du message)
    (la classe meme avec les deux bout de code n'est pas complete mais c'est
    bien la que se situe le trouble)
    a quoi sert cette classe ChatSender a metre en ordre un flux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                             socket.receive(packet);
                             byte[] rcvd = packet.getData();
                             ChatSender chat = new ChatSender(rcvd);
                             notifyee.blaBlaBla(chat);
    merci pour vos reponses - faites et a venir-

  6. #6
    Membre habitué Avatar de soulhouf
    Inscrit en
    Août 2005
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 213
    Points : 133
    Points
    133
    Par défaut Re: [Array][String]byte[]
    Citation Envoyé par beb-mbs
    chatSender.rcv = bien ce qu'il doit egaler.
    désolé car j'ai cru que chatSender était le nom de ta classe c'est pour ça que j'ai fait la remarque.
    "Ce qui ne nous tue pas nous rend plus fort"
    Nietzsche

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 220
    Points : 266
    Points
    266
    Par défaut
    Je sais pas si je comprends bien le soucis...

    Mais en gros, lorsque tu recuperes le flux, tu ne sais pas par quel champ il commence, ni quelle taille fait ce champs ?

    Si c'est ca, n'as tu pas moyen de mettre des delimiteurs (style des balises) pour entourer tes champs nom, numéro, et message ?

    Si oui, tu peux ensuite faire un repérage sur ton flux, pour delimiter tes champs...

    Ca n'ecrit pas dans le bon ordre forcement, mais par contre, ca te permet de reconstituer tes donnes a l'autre bout...

    Enfin, possiblement, je te dis peut etre n'importe quoi...

  8. #8
    Membre confirmé Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Points : 508
    Points
    508
    Par défaut
    Alors là tu va m'expliquer .. parce que si tu as compilé ton code, je veux bien me faire appeler Arthur ...
    D'après toi tu lance ça :
    Citation Envoyé par beb-mbs
    public ChatSender (int rcv, String name, String mail) {
    ...}
    avec ça :
    Citation Envoyé par beb-mbs
    socket.receive(packet);
    byte[] rcvd = packet.getData();
    ChatSender chat = new ChatSender(rcvd);
    J'ai bien compris ?
    Dis moi comment ton byte[] se transforme magiquement en "int, String, String" ????

    T'as pas moyen de :
    envoyer / recevoir ton int .... puis
    envoyer / recevoir ta String .... puis
    envoyer / recevoir ta String ??? ça serait plus sûr.
    Toute vérité est bonne à entendre, même si toutes les vérités ne sont pas bonnes à dire.
    Rien ne sert de partir à point, il vaut mieux courir .

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 220
    Points : 266
    Points
    266
    Par défaut
    A mon avis, il a pas mis tout son code, et il a un autre constructeur a cote...

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 220
    Points : 266
    Points
    266
    Par défaut
    Sinon, c'est vrai que je comprends pas trop pourquoi tes packets arrivent dans un autre quelconque...

    Tu les envoies comment ? Ils sont générés dans des threads differents qui communiquent sur la meme socket ?

    tu n'as pas moyen de faire des envois successifs, ou de tout mettre dans un seul bloc de données, en sequentiel ?

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 34
    Points : 35
    Points
    35
    Par défaut
    Slt
    Ghorgor , tu as cerne le probleme
    jusqu'a present sa fonctionnais sans la variable " name" , la recherche d'un utilisateur par son nom etait possible parceque le nom ne pouvais pas etre enregistre "en double". Le probleme vient du fait que une nouvelle mouture voudrais autoriser l'enregistrement d'un nom d'utilisateur sans restriction pour l'envois de message a des groupes
    pour l'envois d'un message deux parametres : un nom ; un numero (unique )
    4 possibilitees aucun des deux ---> envoye a tous
    que le nom -----> traite comme groupe
    les deux autres possibilitees ------> individu unique
    si je n'arrive pas a sa en "greffant" la variable "name" dans la classe ChatSender j'envisagerais une autre solution.
    mais je reste a l'ecoute.

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 220
    Points : 266
    Points
    266
    Par défaut
    Si je me trompe pas, tu dois pouvoir utilisé ca en faisant une correspondance...

    En gros, ton logiciel fonctionnait quand tu avais juste un envoi avec le numéro si je ne me trompe pas...

    Si tu rajoutes en amont, un test sur la présence du numéro, ca devrait pouvoir marcher :

    Si numéro, ton envoi se fait comme précédemment
    Si pas de numéro, recherche de la correspondance entre le nom et le(s) numéro(s) associés, et envoi a tous les destinataires (eventuellement en succesifs, dans une boucle)
    Si ni nom ni numéro, envoi a tous.

    En gros, avec soit un fichier de correspondance que tu parses (XML ?), soit une petite base de données, tu dois pouvoir t'en sortir.

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 34
    Points : 35
    Points
    35
    Par défaut
    Slt.
    Les envois sont fait "a coup sur" la presence des destinataires des mails qu'ils soit individus ou groupes est verifier.
    Je suis parvenu a ce que je voulais mais contrairement a ce que je pensai, sa c'est avere bien plus ardu que la solution que tu avance dans ton dernier post.
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. String vers array of bytes.
    Par DakM dans le forum Langage
    Réponses: 2
    Dernier message: 07/11/2011, 17h38
  2. String of byte array to byte array
    Par LadyN dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 07/04/2010, 19h14
  3. Réponses: 5
    Dernier message: 08/07/2008, 17h33
  4. Réponses: 5
    Dernier message: 18/11/2005, 22h11
  5. [Type] alternative a "array of byte"
    Par Clorish dans le forum Langage
    Réponses: 2
    Dernier message: 12/07/2005, 11h59

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