Composition de flux

Mise à jour : novembre 2007

Un magasin de stockage correspond à un support de stockage tel qu'un disque ou la mémoire. Chaque magasin de stockage implémente son propre flux en tant qu'implémentation de la classe Stream. Chaque type de flux lit les octets à partir de son magasin de stockage donné ou les y écrit. Les flux qui se connectent à des magasins de stockage sont appelés flux de base. Les flux de base possèdent des constructeurs qui ont les paramètres requis pour connecter le flux au magasin de stockage. Par exemple, FileStream possède des constructeurs spécifiant un paramètre de chemin d'accès, qui indique le mode de partage du fichier par les processus, etc.

Le design des classes System.IO assure une composition simplifiée des flux. Les flux de base peuvent être associés à un ou plusieurs flux directs fournissant la fonctionnalité souhaitée. Un lecteur ou un writer peut être attaché en fin de chaîne afin de pouvoir aisément lire ou écrire les types préférés.

L'exemple de code suivant crée FileStream à partir du fichier MyFile.txt existant afin de placer MyFile.txt en mémoire tampon. (Notez que les objets FileStream sont mis par défaut en mémoire tampon.) Un StreamReader est ensuite créé pour lire les caractères à partir du FileStream, qui est passé au StreamReader en tant qu'argument de son constructeur. ReadLine poursuit la lecture jusqu'à ce que Peek ne trouve plus de caractères.

Option Explicit On 
Option Strict On
Imports System
Imports System.IO
Public Class CompBuf
    Private Const FILE_NAME As String = "MyFile.txt"
    Public Shared Sub Main()
        If Not File.Exists(FILE_NAME) Then
            Console.WriteLine("{0} does not exist!", FILE_NAME)
            Return
        End If
        Dim fsIn As New FileStream(FILE_NAME, FileMode.Open, FileAccess.Read, FileShare.Read)
        ' Create an instance of StreamReader that can read 
        ' characters from the FileStream.
        Dim sr As New StreamReader(fsIn)
        ' While not at the end of the file, read lines from the file.
        While sr.Peek() > -1
            Dim input As String = sr.ReadLine()
            Console.WriteLine(input)
        End While
        sr.Close()
    End Sub
End Class
using System;
using System.IO;
public class CompBuf 
{
    private const string FILE_NAME = "MyFile.txt";
    public static void Main(String[] args) 
    {
        if (!File.Exists(FILE_NAME)) 
        {
            Console.WriteLine("{0} does not exist!", FILE_NAME);
            return;
        }
        FileStream fsIn = new FileStream(FILE_NAME, FileMode.Open,
            FileAccess.Read, FileShare.Read);
        // Create an instance of StreamReader that can read 
        // characters from the FileStream.
        StreamReader sr = new StreamReader(fsIn); 
        // While not at the end of the file, read lines from the file.
        while (sr.Peek()>-1) 
        {
            String input = sr.ReadLine();
            Console.WriteLine (input);
        }
        sr.Close();
    }
}

L'exemple de code suivant crée FileStream à partir du fichier MyFile.txt existant afin de placer MyFile.txt en mémoire tampon. (Notez que les objets FileStream sont mis par défaut en mémoire tampon.) Un BinaryReader est ensuite créé pour lire les octets à partir du FileStream, qui est passé au BinaryReader en tant qu'argument de son constructeur. ReadByte poursuit la lecture jusqu'à ce que PeekChar ne trouve plus d'octets.

Option Explicit On 
Option Strict On
Imports System
Imports System.IO
Public Class ReadBuf
    Private Const FILE_NAME As String = "MyFile.txt"
    Public Shared Sub Main()
        If Not File.Exists(FILE_NAME) Then
            Console.WriteLine("{0} does not exist.", FILE_NAME)
            Return
        End If
        Dim f As New FileStream(FILE_NAME, FileMode.Open, FileAccess.Read,
            FileShare.Read)
        ' Create an instance of BinaryReader that can 
        ' read bytes from the FileStream.
        Dim sr As New BinaryReader(f)
        ' While not at the end of the file, read lines from the file.
        While sr.PeekChar() > -1
            Dim input As Byte = sr.ReadByte()
            Console.WriteLine(input)
        End While
        sr.Close()
    End Sub
End Class
using System;
using System.IO;
public class ReadBuf 
{
    private const string FILE_NAME = "MyFile.txt";
    public static void Main(String[] args) 
    {
        if (!File.Exists(FILE_NAME)) 
        {
            Console.WriteLine("{0} does not exist.", FILE_NAME);
            return;
        }
        FileStream f = new FileStream(FILE_NAME, FileMode.Open,
            FileAccess.Read, FileShare.Read);
        // Create an instance of BinaryReader that can 
        // read bytes from the FileStream.
        BinaryReader sr = new BinaryReader(f); 
        // While not at the end of the file, read lines from the file.
        while (sr.PeekChar()>-1) 
        {
            byte input = sr.ReadByte();
            Console.WriteLine (input);
        }
        sr.Close();
    }
}

Voir aussi

Concepts

E/S de fichier de base

Création d'un writer

Référence

StreamReader

StreamReader.ReadLine

StreamReader.Peek

FileStream

BinaryReader

BinaryReader.ReadByte

BinaryReader.PeekChar