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

Python Discussion :

converstion de code en java - File to Bytes array


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    ingénieur
    Inscrit en
    Octobre 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : ingénieur

    Informations forums :
    Inscription : Octobre 2004
    Messages : 58
    Par défaut converstion de code en java - File to Bytes array
    hello
    je cherche à traduire ce bout de code en java,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def create_data_assist():
     
        list_byte = list()
        with open("data_assist_ublox.bin", "rb") as f:
            byte = f.read(1)
            while byte:
                list_byte.append(int(byte.hex(), 16))
                byte = f.read(1)
        return bytearray(list_byte)
    Il s'agit d'une simple transformation d'un file en bytesarray, mais il y a une conversion en hexa, que je n'arrive pas à traduire en java pour l'instant
    je suis prenneur de toute piste, merci

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Je ne connais pas Python donc incapable d'expliquer le pourquoi du comment de ce code.

    Mais un fichier est toujours de toute manière stocké en binaire. L'hexadécimal c'est juste une représentation du binaire. Il n'y a pas besoin (en Java en tout cas) de convertir les octets qu'on lit du fichier en hexadécimal pour les stocker dans un tableau d'octets (byte[]). Un octet c'est un octet et sa représentation n'est pas pertinente lorsqu'on le transfert (d'un fichier à un tableau par exemple). Après si on veut afficher les octets lus (en console par exemple), c'est un autre problème : on peut utiliser une conversion via Integer.toHexString( ) par exemple, ou, de préférence un formatage, par System.out.printf("%02x", octet);, par exemple.

    A la base, on lit les octets un à un (ou par paquets d'octets pour de meilleures performances) et on les stocke dans le tableau (qu'on va devoir agrandir au fur et à mesure). La classe ByteArrayOutputStream va permettre de gérer automatiquement cette écriture et agrandissement.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public static byte[] readAllBytes(String filepath) throws IOException {
    		try (ByteArrayOutputStream output = new ByteArrayOutputStream() ) {
    			try(InputStream input
    			        = new BufferedInputStream(Files.newInputStream(Paths.get(filepath)))) {
    				byte[] buffer = new byte[16384];
    				for(int read = input.read(buffer); read>=0; read = input.read(buffer)) {
    					output.write(buffer,0,read);
    				}
    			}
    			return output.toByteArray();
    		}
    	}
    Cependant, le JDK fournit une méthode toute faite qui permet de lire directement un byte[] depuis un fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    byte[] array = Files.readAllBytes(Paths.get("example.bin")); // chemin à adapter
    Bien sûr, l'usage de ce code est limité à un fichier dont le nombre d'octets est inférieur à la taille maximum d'un tableau et la mémoire disponible forcément.

    La solution, si nécessaire, dépend de ce que tu cherches à faire au final, quel est le contenu du fichier, ce que tu veux en faire, etc. Charger un fichier complètement en mémoire n'est pas forcément la meilleure solution (on peut lire le fichier par exemple via un RandomAccessFile).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre averti
    Profil pro
    ingénieur
    Inscrit en
    Octobre 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : ingénieur

    Informations forums :
    Inscription : Octobre 2004
    Messages : 58
    Par défaut
    merci pour ta réponse. en fait je connais deja un peu le principe en effet.
    je suis en train de convertir un script en python comme je disais , c'est un algo qui traite ce tabelau de bytes, le probleme que j'ai c'est que sur le meme fichier binaire, je n'obtiens pas le meme nombre d'element en python ( avec le bout de code indiqué) et mon code en java. ce qui est problématique pour la sutie du traitement...
    voici mon code en java, il est basique et utilise en effet la méthode que tu evoquais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     File file = new File(resource.toURI());
     
            int fileLength = (int) file.length();
            byte[] bytes = new byte[fileLength];
     
            FileInputStream inputStream = new FileInputStream(file);
            inputStream.read(bytes);
            inputStream.close();
     
            return bytes;
    La seule différence que je vois est le fait qu'avec python , on agit sur chaque octet en le transcodant en hexa.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    list_byte.append(int(byte.hex(), 16))

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 720
    Par défaut
    Salut,

    Le code Python lit les n premiers octets non nuls du fichier.

    La conversion list_byte.append(int(byte.hex(), 16)) ne sert à rien: list_byte.append(byte[0]) suffirait.

    En Python retourner le contenu du fichier comme bytearray serait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def create_data_assist():
         return bytearray(open("data_assist_ublox.bin", "rb").read())
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre averti
    Profil pro
    ingénieur
    Inscrit en
    Octobre 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : ingénieur

    Informations forums :
    Inscription : Octobre 2004
    Messages : 58
    Par défaut
    bon alors, honte sur moi, je suis vraiment désolé, je pensais etre sur d'être sur le meme fichier binaire, mais c'etait pas le cas.. fatigué..
    merci encore pour votre aide

    @wiztricks merci en effet, j'ai testé dans mon script python, le resulat est exactement le meme..

    bonne journée à vous

Discussions similaires

  1. Différence entre le byte-code de Java et MSIL
    Par medamin27 dans le forum Général Dotnet
    Réponses: 8
    Dernier message: 19/06/2011, 11h10
  2. [WTP] Gener. Auto. code proxy JAVA a partir WSDL
    Par svinchon dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 28/02/2006, 09h38
  3. [Info]Perte de code source java peut'on le retrouver ?
    Par Zapan dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 08/01/2006, 19h21
  4. java.awt.Image -> byte[]
    Par keil dans le forum 2D
    Réponses: 7
    Dernier message: 28/09/2005, 13h38
  5. [Info]standards de code (C++, java) et normes
    Par ned-flanders dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 01/05/2005, 22h49

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