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 :

probleme avec CipherInputStream


Sujet :

Entrée/Sortie Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 215
    Par défaut probleme avec CipherInputStream
    Bonjour j'utilise un CipherInputStream pour récupérer un tableau de bytes déchiffrer :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //is : inputstream du fichier crypté 
    cis = new CipherInputStream(is, cipher);
    je voudrais récuperer (dans un ByteArrayOutputStream ) le tableau de bytes mais sans les 100 premiers bytes.

    Quelle est la meilleure façon de procédé ? (methode read() ... )

    Merci de votre aide

    Thomas

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2009
    Messages : 112
    Par défaut
    Salut,

    http://java.sun.com/j2se/1.5.0/docs/...putStream.html

    la méthode read(byte[] b, int off, int len) devrait pouvoir t'aider je pense.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 215
    Par défaut
    Je suis un peu perdu :

    Apparament ceci enleverai les 100 premiers bytes , mais je ne comprends pas pourquoi ??

    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
     
            byte[] b = new byte[90000];
    	int i;
    	cis = new CipherInputStream(is, cipher);
     
     
     
    		try {
    			// on enlève les 100 premiers bytes
    			for (int z=0;z<100;z++) {
    				cis.read();
    			}
     
    // on écrit dans le tableau de byte de sortie 
     
    			while (   (i = cis.read(b)) >= 0    ) {
    				dos.write(b, 0, i);	
     
     
    			}
    Je veux bien que l'on m'explique ce code

    Merci

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2009
    Messages : 112
    Par défaut
    Je n'ai pas testé le code mais a priori la première boucle for lit les 100 premiers octets. Et la seconde lit la suite à coup de 90000 octets.

    Quel est le problème ?

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 155
    Par défaut
    Quand tu lit un octet dans le flux, tu le retire de celui-ci en même temps.
    C'est pour cela que lorsque tu lit 100 octets sans les traiter c'est comme si tu les supprimai.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 215
    Par défaut
    D'accord je comprends mieux, merci

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 215
    Par défaut
    Par contre ,je ne comprends pas très bien le
    à coup de 90000 octets
    .

    ainsi que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dos.write(b, 0, i);
    pourquoi ces paramètres ?

  8. #8
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2009
    Messages : 112
    Par défaut
    à coup de 90000 octets
    comme précisé dans la spec, la fonction read(byte[] ) lit (si possible) autant de caractères depuis le flux que la taille du tableau passé en paramètre : en l'occurrence 90000

    La méthode dos.write(b, 0, i) va écrire dans le flux le contenu du tableau b entre les indices 0 et i (i correspondant au nombres de caractères effectivement lus depuis le flux par la méthode read. concrètement il peut être inférieur à 90000 quand on arrive à la fin des données)

    si ce n'est pas très clair, n'hésite pas à demander des précisions

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 215
    Par défaut
    c'est très clair

    Merci beaucoup

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 215
    Par défaut
    Si finalement je veux bien une explication supplémentaire :

    j'ai initialisé le tableau de bytes comme ceci et j'affiche la valeur de i à chaques tour de boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    byte[] b = new byte[500];
     
     
    			while (   (i = cis.read(b)) != -1    ) {
     
    		System.out.println("i :"+i);
     
    				dos.write(b, 0, i);	
     
    			}
    Le résultat de l'affichage est le suivant :

    i : 376
    i : 500
    i : 12
    i : 500
    i :12
    ...
    ...

    i500
    i12
    i339


    Pourquoi le premier i est différent ??
    Pourquoi i ne vaut il pas toujours 512 sauf le dernier bien sur ??

    Merci encore

  11. #11
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2009
    Messages : 112
    Par défaut
    mum...là tu me poses une colle

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Par défaut
    Bonjour,
    généralement quand on envoie un message, il y a un tag de début (STX) et un tag de fin (ETX) c'est sans doute leur valeur.
    après je peux me tromper! ^^

  13. #13
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Par défaut
    Parce que ton input ne se remplit pas assez vite.

    Tu as par exemple 500 octets dans ton input, tu les lis.
    A l'itération suivante, ton input n'a eu le temps de se remplir que de 300 octets, tu pourras donc lire que 300 octets dessus.

    Accessoirement, les méthodes read() ne lisent que la charge utile d'un paquet, tout ce qui est tag, ip, ou autre crc ne sont pas retourner et font partie de la couche basse du traitement. Je ne sais pas par contre s'il y'a possibilité en Java d'y avoir accès ?

Discussions similaires

  1. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  2. Problèmes avec le filtrage des ip
    Par berry dans le forum Réseau
    Réponses: 9
    Dernier message: 30/12/2002, 07h51
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

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