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

Collection et Stream Java Discussion :

Un Stream dynamique.


Sujet :

Collection et Stream Java

  1. #1
    Membre éclairé Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Par défaut Un Stream dynamique.
    Voilà, je voudrais savoir s'il existe des streams dynamiques, après avoir cherché je n'en trouve pas, je m'explique...

    J'ai par exemple un fichier de 10 lignes, et je voudrais qu'un streal le considère en quelque sorte comme une liste chaînée, pour qu'à l'aide d'un itérateur par exemple je puisse écrire à la 4è ligne sans perte de complexité, c'est-à-dire que je veux écrire à la troisième ligne sans recopier les 8 autres ensuite...

    Voilà je sais pas si c'était clair, merci d'avance...

  2. #2
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Tu as regardé RandomAccess File, sinon je ne sais pas.

    En tout cas j'adore ton avatar et surtout ce dessinateur Alberto Varanda

  3. #3
    Membre éclairé Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Par défaut
    RandomAcces ne s'utilise que pour la lecture je crois.

    Sinon l'avatar vient de la couverture du tome 2 de la série de 4 bd Paradis Perdu (ledit tome est intitulé purgatoire), par les Editions Soleil (autheur : Ange ~ Xavier ~ Alexe )



    Sinon pour en revenir à l'informatique, y a qqn qui aurait une solution à mon problème?

  4. #4
    Membre éclairé Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Par défaut
    Je corrige : RandomAccesFile fais effectivement la lecture et l'écriture, et on écrit là ou on veut grace à la méthode seek(long). Le problème est que le paramètre indique le num du caractère après lequel on veut écrire, ce qui ne nous arrange pas si on veut écrire à la ligne 8 par exemple, sauf si toutes les lignes possèdent un nombre fixe de caractères...

    Donc, qqn a-t-il une idée constructive d'un point de vue complexité avantageuse s'il n'existe rien de précréé?

  5. #5
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Euh ou pas, sinon quel serait l'intérêt de la méthode write qu'elle possède

    Edit grillé

  6. #6
    Membre éclairé Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Par défaut
    euh j'ai pas bien compris ta remarque sinok...

    En fait RandomAcesFile ne fonctionne pas comme je le voudrait, dans le sens ou quand on écrit, on "écraseé les bits sur lesquels on écrit.

    Par ex soit le fichier texte contenant les lignes

    1
    2
    3
    5
    6
    7
    8
    9

    J'utilise seek(9L) pour aller à la 4è ligne (3 pour les lignes + 3 * 2 caractères pour le fin de ligne), et ensuite je veux écrire le chiffre 4.

    et ben ça marche pas et ça donne :

    1
    2
    3
    => ici on le voit pas mais y a un caractère binaire (petit rectangle et ça tient en une ligne)
    7
    8
    9

    ce qui n'est pas le résultat escompté.


    Comment palier à ma situation?

  7. #7
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Désolé tu avait déja répondu quand j'ai pu poster en fait...

    Sinon pour le randomAccessFile mieux vaut passer par la méthode write qui prend en paramètre un tablea de byte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     RandomAccessFile r = new RandomAccessFile(file, "rws");
                r.write(new String("The sky is blue").getBytes());
                r.close();
    ce code marche correctement, bon ensuite il est simpliste.

    Ensuite pour ajouter seulement un caractère il faut passer par son code ascii

    Soit le caractère '9'
    son code ascii vaut 57

    don pour avoir 9 dans ton fichier il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    RandomAccessFile r = new RandomAccessFile(file, "rws");
                r.write(57);
                r.close();
    ou encore, en version plus compréhensible

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    RandomAccessFile r = new RandomAccessFile(file, "rws");
                r.write((int) '9');
                r.close();

  8. #8
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    ATTENTION : Les méthodes write écrasent les caractères en cours ( sauf en fin de fichier, dans tel cas, les caractères sont ajoutés ).
    Si tes lignes possèdent toujours la même longueur ( nombre de caractères ), tu peux utiliser les méthodes write comme mentionné par sinok.
    Si en revenche, tu dois inserer, ou supprimer un ou plusieurs caractères, tu n'auras pas d'autre choix que de :
    - recopier le début ( invariant ) du fichier dans un fichier temporaire
    - faire la modif ( insertion/suppression ) dans le fichier temporaire
    - recopier la fin ( invariante ) dans le fichier temporaire
    - Renommer le fichier temporaire avec le nom de ton fichier d'origine.

    [EDIT] si ton fichier n'est pas gros, tu peux te passer du fichier temporaire et utiliser un conteneur comme une ArrayList par exemple.

  9. #9
    Membre éclairé Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Par défaut
    Il n'y a vraiment aucun moyen d'écrire dans un fichier donc sans écraser les caractères??? C'est idiot...
    Sinon comment implémenter ça sans perdre de la complexité?

  10. #10
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Razgriz
    Il n'y a vraiment aucun moyen d'écrire dans un fichier donc sans écraser les caractères??? C'est idiot...
    Non c'est normal !
    Cela n'a rien à voir avec Java car le principe reste le même pour tous les langages !

    Insérer des caractères dans un fichier impliquerait de décaler la fin du fichier, et cela autant de fois que neccessaire...

    Les principaux systèmes de fichiers ne supporte pas cela.

    Citation Envoyé par Razgriz
    Sinon comment implémenter ça sans perdre de la complexité?
    Voir la solution de iohack

    Et si le fichier n'est pas trop grand et qu'il peut tenir en mémoire tu peux utiliser directement un StringBuffer...

    a++

  11. #11
    Membre éclairé Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Par défaut
    Ok je vais m'y atteler. C'est quand même dommage qu'on ne puisse pas faire comme ça...

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

Discussions similaires

  1. Streaming des playlistes dynamiques
    Par nono21000 dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 08/08/2008, 00h21
  2. comment creer un alias dynamique avec BDE et ODBC
    Par david33 dans le forum C++Builder
    Réponses: 2
    Dernier message: 12/07/2002, 12h50
  3. Création dynamique de TImages
    Par Dric dans le forum C++Builder
    Réponses: 10
    Dernier message: 08/07/2002, 13h36
  4. Réponses: 4
    Dernier message: 13/05/2002, 17h43
  5. repertoire temp dynamique
    Par killpilot dans le forum C
    Réponses: 2
    Dernier message: 26/04/2002, 17h19

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