Stream Classe

Definição

Fornece uma visão genérica de uma sequência de bytes. Esta é uma classe abstrata.

public ref class Stream abstract : IDisposable
public ref class Stream abstract : MarshalByRefObject, IDisposable
public ref class Stream abstract : MarshalByRefObject, IAsyncDisposable, IDisposable
public abstract class Stream : IDisposable
[System.Serializable]
public abstract class Stream : MarshalByRefObject, IDisposable
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class Stream : MarshalByRefObject, IDisposable
public abstract class Stream : MarshalByRefObject, IDisposable
public abstract class Stream : MarshalByRefObject, IAsyncDisposable, IDisposable
type Stream = class
    interface IDisposable
[<System.Serializable>]
type Stream = class
    inherit MarshalByRefObject
    interface IDisposable
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type Stream = class
    inherit MarshalByRefObject
    interface IDisposable
type Stream = class
    inherit MarshalByRefObject
    interface IDisposable
type Stream = class
    inherit MarshalByRefObject
    interface IAsyncDisposable
    interface IDisposable
Public MustInherit Class Stream
Implements IDisposable
Public MustInherit Class Stream
Inherits MarshalByRefObject
Implements IDisposable
Public MustInherit Class Stream
Inherits MarshalByRefObject
Implements IAsyncDisposable, IDisposable
Herança
Stream
Herança
Derivado
Atributos
Implementações

Exemplos

O exemplo seguinte demonstra como usar dois FileStream objetos para copiar assíncronamente os ficheiros de um diretório para outro. A FileStream classe deriva da Stream classe. Observe que o Click manipulador de eventos para o Button controle está marcado com o async modificador porque ele chama um método assíncrono.

using System;
using System.Threading.Tasks;
using System.Windows;
using System.IO;

namespace WpfApplication
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private async void Button_Click(object sender, RoutedEventArgs e)
        {
            string StartDirectory = @"c:\Users\exampleuser\start";
            string EndDirectory = @"c:\Users\exampleuser\end";

            foreach (string filename in Directory.EnumerateFiles(StartDirectory))
            {
                using (FileStream SourceStream = File.Open(filename, FileMode.Open))
                {
                    using (FileStream DestinationStream = File.Create(EndDirectory + filename.Substring(filename.LastIndexOf('\\'))))
                    {
                        await SourceStream.CopyToAsync(DestinationStream);
                    }
                }
            }
        }
    }
}
Imports System.IO

Class MainWindow

    Private Async Sub Button_Click(sender As Object, e As RoutedEventArgs)
        Dim StartDirectory As String = "c:\Users\exampleuser\start"
        Dim EndDirectory As String = "c:\Users\exampleuser\end"

        For Each filename As String In Directory.EnumerateFiles(StartDirectory)
            Using SourceStream As FileStream = File.Open(filename, FileMode.Open)
                Using DestinationStream As FileStream = File.Create(EndDirectory + filename.Substring(filename.LastIndexOf("\"c)))
                    Await SourceStream.CopyToAsync(DestinationStream)
                End Using

            End Using
        Next
    End Sub

End Class

Observações

Stream é a classe base abstrata de todos os fluxos. Um fluxo é uma abstração de uma sequência de bytes, como um ficheiro, um dispositivo de entrada/saída, um canal de comunicação entre processos ou um socket TCP/IP. A Stream classe e as suas classes derivadas fornecem uma visão genérica destes diferentes tipos de entrada e saída, isolando o programador dos detalhes específicos do sistema operativo e dos dispositivos subjacentes.

Os fluxos envolvem três operações fundamentais:

  • Podes ler nos streams. A leitura é a transferência de dados de um fluxo para uma estrutura de dados, como um array de bytes.

  • Podes escrever para streams. Escrita é a transferência de dados de uma estrutura de dados para um fluxo.

  • Os streams podem suportar a procura. Seeking refere-se a consultar e modificar a posição atual dentro de um fluxo. A capacidade de seek depende do tipo de backing store que um stream tem. Por exemplo, os fluxos de rede não têm um conceito unificado de posição atual e, por isso, normalmente não suportam a procura.

Alguns dos fluxos mais usados que herdam de Stream , FileStreame MemoryStream.

Dependendo da fonte de dados subjacente ou repositório, os fluxos podem suportar apenas algumas destas capacidades. Pode consultar um fluxo para as suas capacidades usando , CanReadCanWrite, e CanSeek propriedades da Stream classe.

Os Read métodos and Write leem e escrevem dados em vários formatos. Para fluxos que suportam a procura, use os Seek métodos e Position propriedades e LengthSetLength e para consultar e modificar a posição atual e o comprimento de um fluxo.

Este tipo implementa a interface IDisposable. Quando terminar de usar o tipo, você deve eliminá-lo direta ou indiretamente. Para descartar o tipo diretamente, chame seu método Dispose em um bloco try/catch. Para descartá-lo indiretamente, use uma construção de linguagem como using (em C#) ou Using (em Visual Basic). Para obter mais informações, consulte a seção "Usando um objeto que implementa IDisposable" no tópico da IDisposable interface.

Eliminar um Stream objeto elimina qualquer dado armazenado em buffer e, essencialmente, chama o Flush método por si. Dispose também liberta recursos do sistema operativo, como handles de ficheiros, ligações de rede ou memória usada para qualquer buffering interno. A BufferedStream classe oferece a capacidade de envolver um fluxo em buffer em torno de outro fluxo para melhorar o desempenho de leitura e escrita.

A partir do .NET Framework 4.5, a classe Stream inclui métodos assíncronos para simplificar operações assíncronas. Um método assíncrono contém Async no seu nome, como ReadAsync, WriteAsync, CopyToAsync, e FlushAsync. Estes métodos permitem-lhe realizar operações de I/O que consomem muitos recursos sem bloquear o thread principal. Essa consideração de desempenho é particularmente importante em um aplicativo da Windows Store 8.x ou aplicativo da área de trabalho, onde uma operação de fluxo demorada pode bloquear o thread da interface do usuário e fazer com que seu aplicativo pareça como se não estivesse funcionando. Os métodos assíncronos são usados em conjunto com as palavras-chave async e await em Visual Basic e C#.

Quando usado numa aplicação Windows 8.x Store, Stream inclui dois métodos de extensão: AsInputStream e AsOutputStream. Estes métodos convertem um objeto Stream num fluxo no Windows Runtime. Também pode converter um fluxo no Windows Runtime para um objeto Stream usando os métodos AsStreamForRead e AsStreamForWrite. Para mais informações, consulte Como: Converter entre fluxos .NET framework e fluxos Windows Runtime

Algumas implementações de fluxos realizam buffering local dos dados subjacentes para melhorar o desempenho. Para esses fluxos, pode usar o Flush método ou FlushAsync para limpar quaisquer buffers internos e garantir que todos os dados foram escritos na fonte de dados ou repositório subjacente.

Se precisar de um fluxo sem armazenamento de suporte (também conhecido como balde de bits), use o Null campo para recuperar uma instância de um fluxo concebido para este propósito.

Notas para Implementadores

Quando implementa uma classe derivada de Stream, deve fornecer implementações para os Read(Byte[], Int32, Int32) métodos e.Write(Byte[], Int32, Int32) Os métodos ReadAsync(Byte[], Int32, Int32)assíncronos , WriteAsync(Byte[], Int32, Int32), e CopyToAsync(Stream) usam os métodos Read(Byte[], Int32, Int32) síncronos e Write(Byte[], Int32, Int32) nas suas implementações. Portanto, as suas implementações de Read(Byte[], Int32, Int32) e Write(Byte[], Int32, Int32) funcionarão corretamente com os métodos assíncronos. As implementações padrão de ReadByte() e WriteByte(Byte) criam um novo array de bytes de elemento único, e depois chamam as suas implementações de Read(Byte[], Int32, Int32) e Write(Byte[], Int32, Int32). Quando deriva de Stream, recomendamos que sobrescrita estes métodos para aceder ao seu buffer interno, se tiver um, para um desempenho substancialmente melhor. Deve também fornecer implementações de CanRead, CanSeek, CanWrite, Flush(), LengthPosition, , Seek(Int64, SeekOrigin), e SetLength(Int64).

Não sobrepiques o Close() método, em vez disso, coloca toda a Stream lógica de limpeza no Dispose(Boolean) método. Para mais informações, consulte Implementar um Método de Eliminação.

Construtores

Name Description
Stream()

Inicializa uma nova instância da Stream classe.

Campos

Name Description
Null

Uma Stream loja sem suporte.

Propriedades

Name Description
CanRead

Quando sobrescrito numa classe derivada, obtém um valor que indica se o fluxo atual suporta leitura.

CanSeek

Quando é sobreposto numa classe derivada, obtém um valor que indica se o fluxo atual suporta a procura.

CanTimeout

Obtém um valor que determina se o fluxo atual pode expirar.

CanWrite

Quando sobrescrito numa classe derivada, obtém um valor que indica se o fluxo atual suporta escrita.

Length

Quando sobrescrito numa classe derivada, obtém o comprimento em bytes do fluxo.

Position

Quando sobrescrito numa classe derivada, obtém ou define a posição dentro do fluxo corrente.

ReadTimeout

Recebe ou define um valor, em milissegundos, que determina quanto tempo o fluxo tentará ler antes de expirar.

WriteTimeout

Recebe ou define um valor, em milissegundos, que determina quanto tempo o fluxo tenta escrever antes de expirar.

Métodos

Name Description
BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)

Inicia uma operação de leitura assíncrona. (Considere usar ReadAsync(Byte[], Int32, Int32) em vez disso.)

BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)

Inicia uma operação de escrita assíncrona. (Considere usar WriteAsync(Byte[], Int32, Int32) em vez disso.)

Close()

Fecha o fluxo atual e liberta quaisquer recursos (como sockets e handles de ficheiros) associados ao fluxo atual. Em vez de chamar este método, certifique-se de que o fluxo é devidamente descartado.

CopyTo(Stream, Int32)

Lê os bytes do fluxo atual e escreve-os noutro fluxo, usando um tamanho de buffer especificado. As posições de ambos os fluxos são avançadas pelo número de bytes copiados.

CopyTo(Stream)

Lê os bytes do fluxo atual e escreve-os noutro fluxo. As posições de ambos os fluxos são avançadas pelo número de bytes copiados.

CopyToAsync(Stream, CancellationToken)

Lê assíncronamente os bytes do fluxo atual e escreve-os noutro fluxo, usando um token de cancelamento especificado. As posições de ambos os fluxos são avançadas pelo número de bytes copiados.

CopyToAsync(Stream, Int32, CancellationToken)

Lê assíncronamente os bytes do fluxo atual e escreve-os noutro fluxo, usando um tamanho de buffer especificado e um token de cancelamento. As posições de ambos os fluxos são avançadas pelo número de bytes copiados.

CopyToAsync(Stream, Int32)

Lê assíncronamente os bytes do fluxo atual e escreve-os noutro fluxo, usando um tamanho de buffer especificado. As posições de ambos os fluxos são avançadas pelo número de bytes copiados.

CopyToAsync(Stream)

Lê assíncronamente os bytes do fluxo atual e escreve-os noutro fluxo. As posições de ambos os fluxos são avançadas pelo número de bytes copiados.

CreateObjRef(Type)

Cria um objeto que contém toda a informação relevante necessária para gerar um proxy usado para comunicar com um objeto remoto.

(Herdado de MarshalByRefObject)
CreateWaitHandle()
Obsoleto.

Aloca um WaitHandle objeto.

Dispose()

Liberta todos os recursos utilizados pelo Stream.

Dispose(Boolean)

Liberta os recursos não geridos usados pelo Stream e opcionalmente liberta os recursos geridos.

DisposeAsync()

De forma assíncrona, liberta os recursos não geridos usados pelos Stream.

EndRead(IAsyncResult)

Espera que a leitura assíncrona pendente seja concluída. (Considere usar ReadAsync(Byte[], Int32, Int32) em vez disso.)

EndWrite(IAsyncResult)

Termina uma operação de escrita assíncrona. (Considere usar WriteAsync(Byte[], Int32, Int32) em vez disso.)

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
Flush()

Quando sobrescrito numa classe derivada, limpa todos os buffers deste fluxo e faz com que quaisquer dados armazenados sejam escritos no dispositivo subjacente.

FlushAsync()

Apaga assíncronamente todos os buffers deste fluxo e faz com que quaisquer dados armazenados sejam escritos no dispositivo subjacente.

FlushAsync(CancellationToken)

Apaga assíncronamente todos os buffers deste fluxo, faz com que quaisquer dados armazenados sejam escritos no dispositivo subjacente e monitoriza os pedidos de cancelamento.

GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetLifetimeService()

Recupera o objeto de serviço de tempo de vida atual que controla a política de vida útil neste caso.

(Herdado de MarshalByRefObject)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
InitializeLifetimeService()

Obtém-se um objeto de serviço vitalício para controlar a apólice vitalícia neste caso.

(Herdado de MarshalByRefObject)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
MemberwiseClone(Boolean)

Cria uma cópia superficial do objeto atual MarshalByRefObject .

(Herdado de MarshalByRefObject)
ObjectInvariant()
Obsoleto.

Fornece suporte para um Contract.

Read(Byte[], Int32, Int32)

Quando sobreposto numa classe derivada, lê uma sequência de bytes do fluxo atual e avança a posição dentro do fluxo pelo número de bytes lidos.

Read(Span<Byte>)

Quando sobreposto numa classe derivada, lê uma sequência de bytes do fluxo atual e avança a posição dentro do fluxo pelo número de bytes lidos.

ReadAsync(Byte[], Int32, Int32, CancellationToken)

A leitura assíncrona uma sequência de bytes do fluxo atual, avança a posição dentro do fluxo pelo número de bytes lidos e monitoriza pedidos de cancelamento.

ReadAsync(Byte[], Int32, Int32)

A leitura assíncrona uma sequência de bytes do fluxo atual e avança a posição dentro do fluxo pelo número de bytes lidos.

ReadAsync(Memory<Byte>, CancellationToken)

A leitura assíncrona uma sequência de bytes do fluxo atual, avança a posição dentro do fluxo pelo número de bytes lidos e monitoriza pedidos de cancelamento.

ReadByte()

Lê um byte do fluxo e avança a posição dentro do fluxo em um byte, ou devolve -1 se estiver no final do fluxo.

Seek(Int64, SeekOrigin)

Quando sobreposto numa classe derivada, define a posição dentro do fluxo atual.

SetLength(Int64)

Quando sobrescrito numa classe derivada, define o comprimento do fluxo atual.

Synchronized(Stream)

Cria um wrapper thread-safe (sincronizado) em torno do objeto especificado Stream .

ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)
Write(Byte[], Int32, Int32)

Quando sobreposto numa classe derivada, escreve uma sequência de bytes no fluxo atual e avança a posição atual dentro desse fluxo pelo número de bytes escritos.

Write(ReadOnlySpan<Byte>)

Quando sobreposto numa classe derivada, escreve uma sequência de bytes no fluxo atual e avança a posição atual dentro desse fluxo pelo número de bytes escritos.

WriteAsync(Byte[], Int32, Int32, CancellationToken)

Escreve assíncronamente uma sequência de bytes no fluxo atual, avança a posição atual dentro deste fluxo pelo número de bytes escritos e monitoriza pedidos de cancelamento.

WriteAsync(Byte[], Int32, Int32)

Escreve assíncronamente uma sequência de bytes no fluxo atual e avança a posição atual dentro desse fluxo pelo número de bytes escritos.

WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Escreve assíncronamente uma sequência de bytes no fluxo atual, avança a posição atual dentro deste fluxo pelo número de bytes escritos e monitoriza pedidos de cancelamento.

WriteByte(Byte)

Escreve um byte na posição atual no fluxo e avança a posição dentro do fluxo em um byte.

Implementações de Interface Explícita

Name Description
IDisposable.Dispose()

Liberta todos os recursos utilizados pelo Stream.

Métodos da Extensão

Name Description
AsInputStream(Stream)

Converte um fluxo gerido nas aplicações .NET for Windows Store num fluxo de entrada no Windows Runtime.

AsOutputStream(Stream)

Converte um fluxo gerido nas aplicações .NET for Windows Store num fluxo de saída no Windows Runtime.

AsRandomAccessStream(Stream)

Converte o fluxo especificado num fluxo de acesso aleatório.

ConfigureAwait(IAsyncDisposable, Boolean)

Configura como aguarda nas tarefas devolvidas de um descartável assíncrono será realizada.

Aplica-se a

Ver também