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

avec Java Discussion :

String codés en octets et flux


Sujet :

avec Java

  1. #1
    Membre régulier Avatar de arkham55
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 179
    Points : 74
    Points
    74
    Par défaut String codés en octets et flux
    Bonsoir à toutes et tous,

    Vous allez bien?

    Voilà mon problème, j'aimerai transmettre de l'information via un flux de données.
    Quand je dis information, je parle d'entiers ou de chaînes de caractère.

    Première partie de ce problème : convertir un entier en binaire sur un octet, et une chaîne (ne dépassant pas 25 caractères) en une série d'octets également.

    Ensuite ces octets seront concaténés pour créer une espèce de trame, que j'aimerai envoyer via un flux à un autre programme qui pourra le décoder.

    J'ai cherché les classes et méthodes qui pourraient m'être utiles, dans la classe String il y a la méthode getBytes(), que j'ai testée :

    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
    		String chaine = "hello world!";
     
    		byte[] octets = chaine.getBytes();
     
    		System.out.println("Array : " + chaine);
     
    		System.out.print("Octet : ");
     
    		int nb = 0;
    		for(int i = 0 ; i <octets.length ; i++){
     
    			System.out.print(octets[i]);
     
    			if((i%8)==0){
    				System.out.print(" ");
    				nb++;
    			}
    		}
    		System.out.println( " sur " + nb + " octets.");
     
    		System.out.println();
     
    		System.out.println("Array rec : " + new String(octets));
    Mais le résultat attendu n'est pas au rendez-vous, surement à cause du charset utilisé.
    Alors, j'ai cherché du côté de la classe BitSet pour avoir un moyen simple.

    Auriez-vous des suggestions pour ce premier problème? (celui du flux viendra ensuite si j'ai des soucis)

    Merci d'avance pour vos réponses et vos conseils.
    C'est à ... que vous ... le plus de mystères.

  2. #2
    Membre régulier Avatar de arkham55
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 179
    Points : 74
    Points
    74
    Par défaut
    Je me suis un peu perdu dans mes premiers tests je pense, voilà ce que j'ai pu coder en allant de la phrase vers le binaire :

    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
    public void test()
    	{
    		String chaine = "hello world!";
    		char[] chaine2 = chaine.toCharArray();
     
    		ArrayList <String> octets = new ArrayList<String>();
     
    		System.out.print("Array : ");
    		for(int j=0 ; j<chaine2.length ;j++){
     
    			String octet = Integer.toBinaryString(charToAscii(chaine2[j]));
    			octets.add(octet);
    			System.out.print(chaine2[j]);
    		}
    		System.out.println();
     
    		for(int i=0 ; i<octets.size() ; i++){
    			System.out.print(octets.get(i) + "  ");
    		}
     
    	}
     
    	public int charToAscii(char c)
    	{
    		return (int) c;
    	}
    Sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Array : hello world!
    1101000  1100101  1101100  1101100  1101111  100000  1110111  1101111  1110010  1101100  1100100  100001
    Qu'en pensez-vous? Rien de bien compliqué en définitive, cependant, si je veux enregistrer l'url d'un site en binaire par exemple, combien d'octets faudrait-il en moyenne d'après vos estimations? J'avais compté 25 caractères qui me paraissent corrects.
    C'est à ... que vous ... le plus de mystères.

  3. #3
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut D'accord
    C'est un peu compliqué tout ça. Est-ce qu'il est impératif que votre flux soit "binaire" ???
    Le programme a qui vos données sont destinées existe-t-il déjà, ou bien est-ce vous qui allez le réaliser.
    En effet, si le flux binaire n'est pas impératif et que vous devez réaliser le programme qui réceptionne l'information, ce serait beaucoup plus simple avec un flux texte.
    En effet, la bibliothèque standard de java offre dans ses packages java.io et java.net tout ce qu'il faut pour écrire une information "texte", donc des chiffres et des lettres, dans un flux réseau sans avoir à se préoccuper de la sérialisation ou de la longueur de ce que l'on veut envoyer, et il existe une multitude de tutoriel sur le sujet des socket...
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 553
    Points : 21 609
    Points
    21 609
    Par défaut
    Je confirme que de nos jours les protocoles binaires n'ont plus la cote, et qu'il y a des raisons à ça.

    Citation Envoyé par arkham55 Voir le message
    Qu'en pensez-vous?
    Qu'est-ce qu'on pense de quoi ? Qu'est-ce que tu as l'impression d'avoir réussi à faire, au juste ? On parlait de binaire, et tu nous sors une List<String> que tu appelles "octets". Je vois pas bien ce que tu espères en faire.

    Des octets, en Java, ça se représente dans un byte[] (ou des fois dans un ByteBuffer.)
    Pour transformer String en byte[], c'est effectivement getBytes()... Qui peut poser des problèmes d'encodage si on s'en sert sans paramètre, mais avec getBytes("utf-8") on est sûr de ce qu'on obtient.
    Transformation inverse : new String(octets, "utf-8");

    Mais bon, j'ai l'impression qu'une fois que tu as un byte[], tu ne sais pas quoi en faire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre régulier Avatar de arkham55
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 179
    Points : 74
    Points
    74
    Par défaut
    Merci pour vos réponses.

    Je voulais simplement envoyer de suite d'octets représentant une chaîne de caractère à un autre programme, ce dernier que je vais réaliser, qui va réceptionner la série et la décoder pour récupérer la chaine envoyée.

    Le flux binaire est juste utile pour "représenter" le fonctionnement de protocole réseaux, tel que TCP, bien sûr, le message est archi basique dans mon exemple, mais c'est pour me familiariser avec les sockets.
    C'est à ... que vous ... le plus de mystères.

  6. #6
    Membre régulier Avatar de arkham55
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 179
    Points : 74
    Points
    74
    Par défaut
    Pour te répondre thelvin, voilà ce que je voulais simplement faire en effet, et tu l'as décris toi-même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void stringToBin(String chaine)
    	{
    		byte[] octets = chaine.getBytes("UTF-8");
     
            for(int i=0 ; i<octets.length ; i++)
            	System.out.print((char)octets[i]);
    	}
    La fonction présente dans le code 3 messages ci-dessus ne sert pas à grand chose en effet, comme je l'avais dit, ce sont de simples tests. Je ne prétends pas développer une nouvelle librairie Java concernant la conversion binaire, désolé..
    C'est à ... que vous ... le plus de mystères.

  7. #7
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut Très bien...
    Dans ce cas, je ne peux que vous inviter à visiter l'URL ci-dessous :

    http://www.oracle.com/technetwork/ja...et-140484.html

    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  8. #8
    Membre régulier Avatar de arkham55
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 179
    Points : 74
    Points
    74
    Par défaut
    C'est toujours bon à prendre! Merci pursang
    C'est à ... que vous ... le plus de mystères.

  9. #9
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut Allons un peu plus loin
    Ok, je crois comprendre que votre intérêt est surtout de comprendre ce qui circule sur le réseau, ou de trouver un support permettant de visualiser les trames réseau pour mieux les expliquer. Dans ce cas, Java dispose d'une librairie tiers très efficace qui permet de 'sniffer' le réseau. Il s'agit de la librairie jpcap.
    Je vous invite à explorer le lien suivant pour vous en faire une meilleure idée :
    http://netresearch.ics.uci.edu/kfujii/Jpcap/doc/

    Bonne continuation à vous, et si vous avez des questions plus précises, n'hésitez surtout pas...
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

Discussions similaires

  1. [delphi 7] [String] [Tableau d'octets]
    Par mkiba dans le forum Débuter
    Réponses: 7
    Dernier message: 17/03/2008, 17h12
  2. Convertir un string en equivalent octet
    Par SPACHFR dans le forum Débuter
    Réponses: 5
    Dernier message: 21/08/2007, 11h32
  3. Comment diriger des string vers un flux mémoire?
    Par Nixar dans le forum VB.NET
    Réponses: 2
    Dernier message: 14/06/2007, 17h49
  4. Compter le nombre d'octets lus dans un flux
    Par Le Furet dans le forum Entrée/Sortie
    Réponses: 25
    Dernier message: 09/03/2006, 08h19
  5. Conversion Strings en Flux
    Par LyonL dans le forum C
    Réponses: 2
    Dernier message: 18/10/2005, 17h52

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