Java Language Lecture d'un fichier à l'aide du canal et du tampon


Exemple

Channel utilise un Buffer pour lire / écrire des données. Un tampon est un conteneur de taille fixe où nous pouvons écrire un bloc de données à la fois. Channel est plus rapide que les E / S basées sur le flux.

Pour lire les données d'un fichier en utilisant Channel nous devons suivre les étapes suivantes:

  1. Nous avons besoin d'une instance de FileInputStream . FileInputStream a une méthode nommée getChannel() qui renvoie un canal.
  2. Appelez la méthode getChannel() de FileInputStream et acquérez Channel.
  3. Créez un ByteBuffer. ByteBuffer est un conteneur de taille fixe d'octets.
  4. Channel a une méthode de lecture et nous devons fournir un ByteBuffer comme argument à cette méthode de lecture. ByteBuffer a deux modes - humeur en lecture seule et humeur en écriture seule. Nous pouvons changer le mode en utilisant l'appel de la méthode flip() . La mémoire tampon a une position, une limite et une capacité. Une fois qu'un tampon est créé avec une taille fixe, sa limite et sa capacité sont identiques à la taille et la position commence à zéro. Alors qu'un tampon est écrit avec des données, sa position augmente progressivement. Changer de mode signifie changer la position. Pour lire des données depuis le début d'un tampon, il faut mettre la position à zéro. La méthode flip () modifie la position
  5. Lorsque nous appelons la méthode de lecture du Channel , elle remplit le tampon en utilisant des données.
  6. Si nous avons besoin de lire les données du ByteBuffer , nous devons retourner le tampon pour changer son mode en écriture seule en mode lecture seule, puis continuer à lire les données du tampon.
  7. Lorsqu'il n'y a plus de données à lire, la méthode read() du canal renvoie 0 ou -1.
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class FileChannelRead {
 
public static void main(String[] args) {
  
   File inputFile = new File("hello.txt");
  
   if (!inputFile.exists()) {
    System.out.println("The input file doesn't exit.");
    return;
   }

  try {
   FileInputStream fis = new FileInputStream(inputFile);
   FileChannel fileChannel = fis.getChannel();
   ByteBuffer buffer = ByteBuffer.allocate(1024);

   while (fileChannel.read(buffer) > 0) {
    buffer.flip();
    while (buffer.hasRemaining()) {
     byte b = buffer.get();
     System.out.print((char) b);
    }
    buffer.clear();
   }

   fileChannel.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}