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 :

Compter le nombre d'octets lus dans un flux


Sujet :

Entrée/Sortie Java

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 277
    Points : 230
    Points
    230
    Par défaut Compter le nombre d'octets lus dans un flux
    Je voudrais savoir le nombre d'octets lus depuis le début du fichier que je suis en train de parcourir.

    Y'a-t-il une méthode qui permet cela ? Je ne la trouve pas dans les méthodes de DataInputStream ni ses prédécesseurs (FilterInputStream et InputStream).

  2. #2
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Chaque appel a read() dans un InputStream renvoie le nombre d'octets que tu viens de lire... de la a t'expliquer qu'il suffit d'additionner ces resultats...
    Romain Guy
    Android - Mon livre - Mon blog

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 277
    Points : 230
    Points
    230
    Par défaut
    Et qu'est-ce qui me prouve qu'additionner va me donner le bon résultat ? D'abord ? Hein ?

    Merci, preuve qu'il vaut mieux un qui sait que dix qui cherchent (ou que moi qui cherche)...

  4. #4
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Non, en programmation pour beaucoup de questions il vaut mieux 10 qui cherchent justement. Quand la reponse se trouve dans la documentation, ce n'est jamais une bonne chose de ne pas trouver tout seul
    Romain Guy
    Android - Mon livre - Mon blog

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 277
    Points : 230
    Points
    230
    Par défaut
    En fait, j'étais persuadé que toutes les méthodes commençant par read servaient à lire une donnée (du type adéquat) du flux. Je ne m'attendais pas à ce que ça renvoit le nombre d'octets lus. D'ailleurs, en lisant la documentation de l'API, je lis :

    Citation Envoyé par La documentation de la classe InputStream
    public abstract int read()
    throws IOException

    Reads the next byte of data from the input stream. The value byte is returned as an int in the range 0 to 255. If no byte is available because the end of the stream has been reached, the value -1 is returned. This method blocks until input data is available, the end of the stream is detected, or an exception is thrown.

    A subclass must provide an implementation of this method.

    Returns:
    the next byte of data, or -1 if the end of the stream is reached.
    Throws:
    IOException - if an I/O error occurs.
    Ce qui n'est pas ce que je demande (mais je vais lire un peu plus loin pour éviter de passer pour un con une 2ème fois).

  6. #6
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Argh la c'est ma faute, j'ai oublie un detail important dans ma reponse. Il faut lire : read(byte[]). J'ai tellement l'habitude de l'utiliser que j'ai oublie de preciser, desole.

    La documentation de cette methode donne l'information suivante :

    Returns:
    the total number of bytes read into the buffer, or -1 is there is no more data because the end of the stream has been reached.
    Note que si tu utilise le read() qui ne renvoie qu'un byte, le principe reste le meme, tu additionne le nombre de bytes lus.
    Romain Guy
    Android - Mon livre - Mon blog

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 277
    Points : 230
    Points
    230
    Par défaut
    Je crois que j'avais mal compris ta réponse. Auquel cas, je précise :

    j'avais bien sûr pensé à utiliser un compteur externe que j'incrémente à chaque appel à une fonction read(), au cas où il n'était pas possible de faire autrement. Mais :

    - il me semblait que ma requête était suffisament naturelle pour que ça existe déjà.
    - ça m'oblige à faire suivre tous mes readxxx() d'une mise à jour du compteur. C'est long, j'ai beaucoup de readxxx() (pour être plus précis, je suis en train de parcourir un fichier .otf ou .ttf. Je sais que la classe Font le fait, mais elle ne donne pas toutes les infos dont j'ai besoin). Je peux aussi créer une classe étendant DataInputStream et gardant les mises à jour du compteur, mais ça me paraissait un peu lourd (et j'ai quand même une dizaine de méthodes read() à définir).

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 277
    Points : 230
    Points
    230
    Par défaut
    Note : j'ai écrit la réponse précédente avant d'avoir lu ta réponse précédant la précédente

    Je crois que je vais étendre DataInputStream.

  9. #9
    Membre actif
    Avatar de jak0
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 272
    Points : 219
    Points
    219
    Par défaut
    Après si tu travail en socket, il me semble qu'il y a une méthode permettant de connaitre les octects transférés dans cette socket.

    Je sais qu'ici, ça n'est pas la question, mais c'est juste une précision annexe.

    Par contre, je pense que pour un flux de lecture, il n'y a aucune raison qu'il existe un compteur de donnés intégré à Java.
    La mise à jour manuelle d'une variable est donc pour moi la seule et unique solution, et je trouve ça bien normal...
    Goah Sha Kree

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 277
    Points : 230
    Points
    230
    Par défaut
    Je suis d'accord avec ton affirmation : je ne vois pas pourquoi l'interface InputStream préciserait un compteur. Par contre, je suis surpris qu'il n'existe pas de classe le faisant (c'est quand même souvent utile). Maintenant, je suis bien conscient que ce que je pense n'a aucun intérêt.

  11. #11
    Membre actif
    Avatar de jak0
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 272
    Points : 219
    Points
    219
    Par défaut
    Perso je ne vois pas l'intéret de l'existence d'une classe le permettant.
    Maintenant c'est mon avis.
    Et il faudrait pas non plus que tout existe, sinon on n'aurait plus rien à faire , non ???
    Goah Sha Kree

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 277
    Points : 230
    Points
    230
    Par défaut
    Tu as raison : je vais me remettre au C

  13. #13
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    Citation Envoyé par jak0
    Perso je ne vois pas l'intéret de l'existence d'une classe le permettant.
    Maintenant c'est mon avis.
    Et il faudrait pas non plus que tout existe, sinon on n'aurait plus rien à faire , non ???
    Pas d'accord..., connaitre le nomre de bytes lu dans un flux est certe une operation "banale" mais fréquemment utilisé, pour moi elle aurait toute sa place dans l'api (sous forme de classe ou de méthode ).
    C'est le mème principe que pour les LinkedList par exemple.
    Mais bon tout cela n'est que mon avis.


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  14. #14
    Membre actif
    Avatar de jak0
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 272
    Points : 219
    Points
    219
    Par défaut
    Citation Envoyé par afrikha
    Pas d'accord..., connaitre le nomre de bytes lu dans un flux est certe une operation "banale" mais fréquemment utilisé, pour moi elle aurait toute sa place dans l'api (sous forme de classe ou de méthode ).
    C'est le mème principe que pour les LinkedList par exemple.
    Mais bon tout cela n'est que mon avis.
    Un autre argument :
    Cette fonctionnalité existe pour les sockets, en effet, si tu ouvre une socket et que tu ecoute, tu ne controle pas le nombre d'octet que tu va recevoir en tout (tu peut limiter mais pas savoir combien il en reste...)
    Par contre quand tu ouvre un flux sur un fichier, c'est toi qui controle tout, donc il est très aisé de savoir le nombre de bits analysés...
    Quest ce ten pense ??
    Goah Sha Kree

  15. #15
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    Citation Envoyé par jak0
    Un autre argument :
    Cette fonctionnalité existe pour les sockets, en effet, si tu ouvre une socket et que tu ecoute, tu ne controle pas le nombre d'octet que tu va recevoir en tout (tu peut limiter mais pas savoir combien il en reste...)
    Par contre quand tu ouvre un flux sur un fichier, c'est toi qui controle tout, donc il est très aisé de savoir le nombre de bits analysés...
    Quest ce ten pense ??
    je ne saisis pas très bien ton argument (c'est peut-étre ma faute ): un fichier tu peux ne pas connaitre sa taille à l'avance.
    mais pour simplifier et se concentrer sur le sujet de la discussion: qu'est-ce qui te génerait qu'une telle fonctionnalité soit présente dans l'api? moi je vois que des avantages: grand nombre d'utilisateurs donc grand nombre de tests et au final une fonction plus fiable et optimisée certainement plus que si elle est implémenté par un développeur dans son coin.


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  16. #16
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Cette fonctionnalite serait inutile pour la plupart des developpeurs. Je fais du Java depuis maintenant 8 ans et je ne me souviens pas d'avoir eu besoin de faire ca. On ne peut pas integrer dans l'API tout ce dont chaque developpeur a besoin. Sache egalement que plus on ajoute des choses dans l'API plus il y a des risques de bugs et des problemes de maintenance pour nous.

    Et puis tu peux connaitre la taille d'un fichier a l'avance
    Romain Guy
    Android - Mon livre - Mon blog

  17. #17
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    En fait ,je crois qu'on n'a pas la mème conception de la chose: pour moi quelque chose d'integrer à l'api est synonyme de fiabilité ,et performances car il a été sujet à des millions de tests et les developpeurs sun auront eu un feedback d'echelle mondiale.
    => conséquence de ceci, le code produit par les développeurs java sera plus sùr, stable et performant.En gros,il vaut mieux un bug dans le jdk qui sera rapidement corrigé et ce de la meilleure manière possible que plein de petit bugs à travers le monde qui résultent du fait que chaque developpeur ait developper dans son coin.

    Je suis d'accord qu'on ne peut pas (et on ne doit pas) tout inclure dans le jdk pour la bonne et simple raison que la qualité de ce dernier baissera en conséquence.

    Gfx, assez de paresse et au boulot...et produit du bon code swing sur lequel on pourra s'appuyer pour nos appli (je plaisante, j'admire particulierement le travail de l'equipe swing )


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  18. #18
    Membre actif
    Avatar de jak0
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 272
    Points : 219
    Points
    219
    Par défaut
    Citation Envoyé par afrikha
    Citation Envoyé par jak0
    Un autre argument :
    Cette fonctionnalité existe pour les sockets, en effet, si tu ouvre une socket et que tu ecoute, tu ne controle pas le nombre d'octet que tu va recevoir en tout (tu peut limiter mais pas savoir combien il en reste...)
    Par contre quand tu ouvre un flux sur un fichier, c'est toi qui controle tout, donc il est très aisé de savoir le nombre de bits analysés...
    Quest ce ten pense ??
    je ne saisis pas très bien ton argument (c'est peut-étre ma faute ): un fichier tu peux ne pas connaitre sa taille à l'avance.
    mais pour simplifier et se concentrer sur le sujet de la discussion: qu'est-ce qui te génerait qu'une telle fonctionnalité soit présente dans l'api? moi je vois que des avantages: grand nombre d'utilisateurs donc grand nombre de tests et au final une fonction plus fiable et optimisée certainement plus que si elle est implémenté par un développeur dans son coin.
    Et le file.length() t'en fait quoi ?
    Goah Sha Kree

  19. #19
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    je voulais parler de la taille de ce que tu lis et non pas la taille du fichier entier. Mais mea culpa, je me suis mal exprimé


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  20. #20
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 277
    Points : 230
    Points
    230
    Par défaut
    Citation Envoyé par Gfx
    Je fais du Java depuis maintenant 8 ans et je ne me souviens pas d'avoir eu besoin de faire ca.
    Ca vois-tu, ça m'étonne. Je suis novice en Java, mais pas en programmation, et il m'est souvent arrivé de devoir farfouiller dans des formats binaires avec des spécifications curieuses (celle des ttf/otf n'étant pas la moins bizarre, curieux pour un format aussi répandu d'ailleurs), et à chaque fois, j'étais bien content d'avoir un index dans mon fichier, pour calculer les offsets qui ne sont jamais référencés par rapport à l'octet courant mais par rapport au début de la sous-sous table bidule...

    Je suis complètement d'accord avec Afrikha. Et tant que j'y suis, Java, ça fait un mois que je m'y plonge, je trouve ça absolûment fabuleux et intelligent à tous les points de vue. C'est peut-être pour ça que je ne m'attendais pas à devoir gérer mon index à la main (voilà une phrase curieuse...)

Discussions similaires

  1. Compter le nombre de lignes transitant dans un flux
    Par taltal dans le forum Développement de jobs
    Réponses: 6
    Dernier message: 16/11/2012, 16h44
  2. Réponses: 2
    Dernier message: 28/04/2006, 13h28
  3. Compter le nombre d'image contenu dans un <div>
    Par denn dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/02/2006, 15h45
  4. [Débutant][RISC]Compter le nombre de bit à 1 dans un octet ?
    Par Pill_S dans le forum Autres architectures
    Réponses: 7
    Dernier message: 23/12/2004, 23h24
  5. recv() et nombre d'octets lus...
    Par Gogoye dans le forum Réseau
    Réponses: 5
    Dernier message: 02/12/2003, 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