Partilhar via


Compor fluxos

Um armazenamento de backup é um meio de armazenamento, como um disco ou memória. Cada loja de suporte diferente implementa seu próprio fluxo como uma implementação da Stream classe.

Cada tipo de fluxo lê e grava bytes de e para seu armazenamento de backup fornecido. Os fluxos que se conectam a repositórios de backup são chamados de fluxos base. Os fluxos de base têm construtores com os parâmetros necessários para conectar o fluxo ao armazenamento de suporte. Por exemplo, FileStream tem construtores que especificam um parâmetro path, que especifica como o arquivo será compartilhado por processos.

O design das System.IO classes fornece composição de fluxo simplificada. Você pode anexar fluxos base a um ou mais fluxos de passagem que fornecem a funcionalidade desejada. Você pode anexar um leitor ou escritor ao final da cadeia, para que os tipos preferidos possam ser lidos ou escritos facilmente.

Os exemplos de código a seguir criam um FileStream em torno do MyFile.txt existente para armazenar em buffer MyFile.txt. Observe que FileStreams são armazenados em buffer por padrão.

Importante

Os exemplos pressupõem que um arquivo chamado MyFile.txt já existe na mesma pasta que o aplicativo.

Exemplo: Usar o StreamReader

O exemplo a seguir cria um StreamReader para ler caracteres do FileStream, que é passado para o StreamReader como seu argumento de construtor. StreamReader.ReadLine em seguida, lê até StreamReader.Peek não encontrar mais caracteres.

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;
        }
        // Create an instance of StreamReader characters from the file.
        using (StreamReader sr = new StreamReader(FILE_NAME))
        {
            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

Exemplo: Usar BinaryReader

O exemplo a seguir cria um BinaryReader para ler bytes do FileStream, que é passado para o BinaryReader como seu argumento construtor. ReadByte em seguida, lê até PeekChar encontrar mais 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;
        }
        using (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

Consulte também