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 :

[Stream] Mettre le contenu d'un File dans un tableau de byte


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 73
    Points : 49
    Points
    49
    Par défaut [Stream] Mettre le contenu d'un File dans un tableau de byte
    Bonjour,

    Je voudrais savoir comment obtenir un tableau de byte[] à partir d'un fichier (Objet File). On a donc au départ un File fichier = new File(path); et on voudrait alimenter un tableau byte[] tabByte à partir du contenu du File. C'est possible ?


    Merci.

  2. #2
    Membre du Club

    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 32
    Points : 55
    Points
    55
    Par défaut
    Ca se fait très facilement avec les Streams, perso je ferais ca comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    FileInputStream input = new FileInputStream(monObjetFile);
    int next = input.read()
    byte b;
    b = (byte)next;
    Et comme ca tu récupère ton byte. Pour faire un tableau hop une petite boucle et c'est bon. la methode read() retourne -1 quand tu arrives au bout du fichier.

  3. #3
    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
    Tu peux optimiser un peu si tu as un gros fichier a lire, plutot que de lire par octet, utiliser plutot la methode read(byte[] b) de FileInputStream.

    Tu peux ainsi demander de lire directement, par exemple 5000 octets dans un tableau de byte, et faire une boucle pour atteindre la fin du fichier, en stockant le tableau précédent, dans un Vector ou un ListArray, par exemple, pour avoir une structure dynamique... Attention cependant si tu as de gros fichiers a lire, a ne pas avoir un OutOfMemory...

    Ca renvoit -1 de la meme maniere quand il n'y a plus rien a lire, et ca te permets de lire tres vite tes fichiers... (je mets 5 minutes pour un fichier de 250 Mo, en lecture, modification, ecriture...)

    Bon courage !

  4. #4
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 73
    Points : 49
    Points
    49
    Par défaut
    Honnêtement, j'ai du mal à suivre. Je ne vois pas comment en utilisant un Vector ou un ArrayList je pourrais stoker des bytes. Vous n'auriez pas un exemple ?

  5. #5
    Membre confirmé

    Inscrit en
    Juillet 2002
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 116
    Points : 514
    Points
    514
    Par défaut
    Voici un exemple simple pour convertir la totalité d'un fichier en un tableau de byte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    File fichier = new File(path);
    byte[] tableau = new byte[fichier.length()];
    FileInputStream in = new FileInputStream(fichier);
    in.read(tableau);
    En espérant que cela t'aide ...

  6. #6
    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 d'accord sauf si tu as un fichier bien lourd...

    Je vois mal passer quelques centaines de Mo en chargement d'un coup...

    Sinon, pour repondre a ta question, tu lis des tableaux de bytes de 5000 octets par exemple, que tu charges dans un Vector (par exemple), sans aller chercher en detail, avec les gestion d'exception et autre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    byte [] CurentData = new byte[5000];
    NumCharRead = MyReader.read(CurentData,0,5000);
    StoredBytes.add(CurentData);
    La, tu lis par bloc de 5000 octets en mettant ca dans une boucle, dont tu sors quand NumCharRead est egal a -1.

    Sur des gros fichiers, ca te permet de ne pas tout charger d'un coup, mais de faire ton traitement avec des blocs de taille raisonnable...

  7. #7
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Mars 2006
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Hello,

    J'utilise ce principe pour stocker le tableau de byte dans une base de données (sous forme de BLOB)

    Mais j'ai un problème , comment procéder quand on a des fichiers de plus de 64Ko

    Car le tableau de Byte c'est : byte[int] , hors int peut pas etre >65535.

    Donc vous avez une solution à m'apporter ?

    merci d'avance

    PS :
    byte[int] => BLOB ca se fait direct sans conversion
    byte[int][int] => BLOB est-ce que ça marche ? sinon mon problème est résolu

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

Discussions similaires

  1. Mettre le contenu d'un fichier dans un tableau
    Par Auzingueur dans le forum Débuter
    Réponses: 7
    Dernier message: 16/12/2013, 10h04
  2. Réponses: 3
    Dernier message: 16/11/2012, 01h34
  3. Mettre le contenu d'une variable dans un tableau
    Par clement106 dans le forum Langage
    Réponses: 3
    Dernier message: 15/06/2010, 20h48
  4. Mettre le contenu d'un .log dans un tableau
    Par KraD_74 dans le forum Langage
    Réponses: 8
    Dernier message: 12/05/2009, 14h15
  5. Réponses: 4
    Dernier message: 26/01/2006, 14h37

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