Comporre flussiCompose streams

Un archivio di backup è un supporto di archiviazione, ad esempio un disco o la memoria.A backing store is a storage medium, such as a disk or memory. Ogni tipo di archivio di backup implementa il flusso come implementazione della classe Stream.Each different backing store implements its own stream as an implementation of the Stream class.

Ogni tipo di flusso legge e scrive i byte da e nel relativo archivio di backup.Each stream type reads and writes bytes from and to its given backing store. I flussi che si connettono agli archivi di backup sono chiamati flussi di base.Streams that connect to backing stores are called base streams. I flussi di base hanno costruttori con i parametri necessari per connettere il flusso all'archivio di backup.Base streams have constructors with the parameters necessary to connect the stream to the backing store. FileStream, ad esempio, ha costruttori che specificano un parametro del percorso, che specifica come il file verrà condiviso dai processi.For example, FileStream has constructors that specify a path parameter, which specifies how the file will be shared by processes.

La progettazione delle classi System.IO consente una composizione dei flussi semplificata.The design of the System.IO classes provides simplified stream composition. I flussi di base possono essere associati a uno o più flussi pass-through che forniscono la funzionalità desiderata.You can attach base streams to one or more pass-through streams that provide the functionality you want. Un lettore o un writer può essere collegato alla fine della catena, in modo che i tipi preferiti possano essere letti o scritti facilmente.You can attach a reader or writer to the end of the chain, so the preferred types can be read or written easily.

Gli esempi di codice seguenti creano un FileStream per il file esistente MyFile.txt in modo da inserire nel buffer MyFile.txt.The following code examples create a FileStream around the existing MyFile.txt in order to buffer MyFile.txt. Si noti che gli elementi FileStream vengono memorizzati nel buffer per impostazione predefinita.Note that FileStreams are buffered by default.

Importante

Gli esempi presuppongono che un file denominato MyFile.txt esista già nella stessa cartella dell'app.The examples assume that a file named MyFile.txt already exists in the same folder as the app.

Esempio: Usare StreamReaderExample: Use StreamReader

L'esempio seguente crea un elemento StreamReader per leggere i caratteri da FileStream, che viene passato a StreamReader come argomento del costruttore.The following example creates a StreamReader to read characters from the FileStream, which is passed to the StreamReader as its constructor argument. StreamReader.ReadLine legge finché StreamReader.Peek non trova più caratteri.StreamReader.ReadLine then reads until StreamReader.Peek finds no more characters.

using System;
using System.IO;

public class CompBuf
{
    private const string FILE_NAME = "MyFile.txt";

    public static void Main()
    {
        if (!File.Exists(FILE_NAME))
        {
            Console.WriteLine($"{FILE_NAME} does not exist!");
            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.
        using (StreamReader sr = new StreamReader(fsIn))
        {
            string input;
            // While not at the end of the file, read lines from the file.
            while (sr.Peek() > -1)
            {
                input = sr.ReadLine();
                Console.WriteLine(input);
            }
        }
    }
}
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($"{FILE_NAME} does not exist!")
            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.
        Using sr As New StreamReader(fsIn)
            Dim input As String
            ' While not at the end of the file, read lines from the file.
            While sr.Peek() > -1
                input = sr.ReadLine()
                Console.WriteLine(input)
            End While
        End Using
    End Sub
End Class

Esempio: Usare BinaryReaderExample: Use BinaryReader

L'esempio seguente crea un elemento BinaryReader per leggere i byte da FileStream, che viene passato a BinaryReader come argomento del costruttore.The following example creates a BinaryReader to read bytes from the FileStream, which is passed to the BinaryReader as its constructor argument. ReadByte legge finché PeekChar non trova più byte.ReadByte then reads until PeekChar finds no more bytes.

using System;
using System.IO;

public class ReadBuf
{
    private const string FILE_NAME = "MyFile.txt";

    public static void Main()
    {
        if (!File.Exists(FILE_NAME))
        {
            Console.WriteLine($"{FILE_NAME} does not exist.");
            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.
        using (BinaryReader br = new BinaryReader(f))
        {
            byte input;
            // While not at the end of the file, read lines from the file.
            while (br.PeekChar() > -1 )
            {
                input = br.ReadByte();
                Console.WriteLine(input);
            }
        }
    }
}
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($"{FILE_NAME} does not exist.")
            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.
        Using br As new BinaryReader(f)
            Dim input As Byte
            ' While not at the end of the file, read lines from the file.
            While br.PeekChar() > -1
                input = br.ReadByte()
                Console.WriteLine (input)
            End While
        End Using
    End Sub
End Class

Vedere ancheSee also