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();
}
}