Partage
  • Partager sur Facebook
  • Partager sur Twitter

flux entrée sortie java

Channel

Sujet résolu
    4 août 2020 à 21:41:56

    Bonjour les amis. :) 

    Pouvez-vous m'aider à comprendre un code svp ?  Actuellement je suis le cours sur java, et je coince avec le chapitre flux entrée et sortie.

    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.nio.ByteBuffer;
    import java.nio.channels.FileChannel;
    
    public class sdz1 {
      public static void main(String[] args) {
            	
    	 	File file = new File("test.txt");
    	  FileInputStream fis;
    	    BufferedInputStream bis;
    	    FileChannel fc;
    
    	    try {
    	    	if(!file.exists()) {
    	    		file.createNewFile();  
    	    		}	      
    				
    	    
    	      fis = new FileInputStream(new File("test.txt"));
    	      
    	      //On récupère le canal	      
    	      fc = fis.getChannel();
    	      
    	      //On en déduit la taille
    	      int size = (int)fc.size();
    	      
    	      //On crée un buffer correspondant à la taille du fichier
    	      ByteBuffer bBuff = ByteBuffer.allocate(size);
    				
    	      
    	    
    	      fc.read(bBuff);
    	      
    	      //On prépare à la lecture avec l'appel à flip
    	      bBuff.flip();
    	     
    				
    	      //Puisque nous avons utilisé un buffer de byte afin de récupérer les données
    	      //Nous pouvons utiliser un tableau de byte
    	      //La méthode array retourne un tableau de byte
    	      byte[] tabByte = bBuff.array();
    				
    	    } catch (FileNotFoundException e) {
    	      e.printStackTrace();
    	    } catch (IOException e) {
    	      e.printStackTrace();
    	    }
    	  
      }
    }

    Ce que je comprend pas c'est l'objet "FileChannel".

    À la ligne 26  je comprend pas quand on dit qu'on récupère le canal.

    Puis à la ligne 29 , on fournit à la variable "size" la taille du canal.

    À la ligne 31 , on crée un buffer, c'est quoi un buffer exactement?

    Et puis à la ligne 39 , on utilise la méthode ".flip()", à quoi ça sert?

    Merci d'avance de prendre de votre temps pour me répondre :)

    • Partager sur Facebook
    • Partager sur Twitter
      5 août 2020 à 9:31:03

      Un buffer est un bloc de données qui est utilisé pour précharger une partie des données à traiter, en utilisant un buffer:

      -on réduit les IO vu qu'on charge un bloc

      -on réduit les possibilités de blocage de lecture ou écriture si un problème arrive vu qu'on a déjà un bloc préchargé

      Pour les descriptions de classes et méthodes tu as la javadoc: https://docs.oracle.com/en/java/javase/11/docs/api/index.html

      • Partager sur Facebook
      • Partager sur Twitter
        6 août 2020 à 21:38:04

        Bonjour,

        Je pense avoir compris le code après quelques recherches.

        Donc là ce qu'on doit faire c'est créer un tampon (buffer), un espace de mémoire pour stocker temporairement des données, j'ai bien compris gràce à ce site. Mais avant de créer un buffer, on doit connaître la taille que doit avoir ce buffer, et pour cela on doit d'abord créer un cannal (chemin) vers le fichier  gràce à la méthode getChannel() de l'objet "FileChannel".

        Puis toujours grâce à l'objet "FileChannel", on peut connaître la taille du fichier, notamment avec la méthode "size()".

        Puis on défini la taille du buffer avec la méthode "allocate()" de l'objet "ByteBuffer".

        Et la méthode "flip()" fonctionne un peu comme les itérateur, cela nous permet de mettre le curseur au début une fois qu'on a lu un fichier. 

        • Partager sur Facebook
        • Partager sur Twitter
          6 août 2020 à 23:20:33

          Bonjour,

          40 lignes pour lire un fichier texte... Bonjour l'usine à gaz.

          Regarde plutôt ici, partie "méthodes utilitaires" :

          https://openclassrooms.com/forum/sujet/tuto-les-flux-fichiers-la-lecture

          • Partager sur Facebook
          • Partager sur Twitter
            10 août 2020 à 20:42:10

            Bonjour,

            Merci brubru777 pour ton lien. Très instructif !

            Dsl du retard de ma réponse, vu que je travail, je n'ai pas le loisir de toujours prendre un peu de mon temps pour coder.

            Merci,

            • Partager sur Facebook
            • Partager sur Twitter

            flux entrée sortie java

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown