Compartir a través de


Stream Clase

Definición

Proporciona una vista genérica de una secuencia de bytes. Se trata de una clase abstracta.

public ref class Stream abstract : IDisposable
public ref class Stream abstract : MarshalByRefObject, IAsyncDisposable, IDisposable
public ref class Stream abstract : MarshalByRefObject, IDisposable
public abstract class Stream : IDisposable
public abstract class Stream : MarshalByRefObject, IAsyncDisposable, IDisposable
public abstract class Stream : MarshalByRefObject, IDisposable
[System.Serializable]
public abstract class Stream : MarshalByRefObject, IDisposable
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class Stream : MarshalByRefObject, IDisposable
type Stream = class
    interface IDisposable
type Stream = class
    inherit MarshalByRefObject
    interface IAsyncDisposable
    interface IDisposable
type Stream = class
    inherit MarshalByRefObject
    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
Public MustInherit Class Stream
Implements IDisposable
Public MustInherit Class Stream
Inherits MarshalByRefObject
Implements IAsyncDisposable, IDisposable
Public MustInherit Class Stream
Inherits MarshalByRefObject
Implements IDisposable
Herencia
Stream
Herencia
Derivado
Atributos
Implementaciones

Ejemplos

En el ejemplo siguiente se muestra cómo usar dos FileStream objetos para copiar de forma asincrónica los archivos de un directorio a otro directorio. La FileStream clase deriva de la Stream clase . Observe que el Click controlador de eventos del Button control está marcado con el async modificador porque llama a un método asincrónico.

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

Comentarios

Stream es la clase base abstracta de todos los flujos. Una secuencia es una abstracción de una secuencia de bytes, como un archivo, un dispositivo de entrada y salida, una canalización de comunicación entre procesos o un socket TCP/IP. La Stream clase y sus clases derivadas proporcionan una vista genérica de estos diferentes tipos de entrada y salida, y aíslan al programador de los detalles específicos del sistema operativo y los dispositivos subyacentes.

Las secuencias implican tres operaciones fundamentales:

  • Puede leer desde secuencias. La lectura es la transferencia de datos de una secuencia a una estructura de datos, como una matriz de bytes.

  • Puede escribir en secuencias. Escribir es la transferencia de datos de una estructura de datos a una secuencia.

  • Las secuencias pueden admitir la búsqueda. La búsqueda hace referencia a la consulta y modificación de la posición actual dentro de una secuencia. La funcionalidad seek depende del tipo de memoria auxiliar que tiene una secuencia. Por ejemplo, los flujos de red no tienen ningún concepto unificado de una posición actual y, por lo tanto, normalmente no admiten la búsqueda.

Algunas de las secuencias más usadas que heredan de Stream son FileStream, y MemoryStream.

Según el origen de datos o el repositorio subyacentes, los flujos solo admiten algunas de estas funcionalidades. Puede consultar una secuencia para sus funcionalidades mediante las CanReadpropiedades , CanWritey CanSeek de la Stream clase .

Los Read métodos y Write leen y escriben datos en una variedad de formatos. Para las secuencias que admiten la búsqueda, use los Seek métodos y y SetLength las Position propiedades y Length para consultar y modificar la posición y la longitud actuales de una secuencia.

Este tipo implementa la IDisposable interfaz . Cuando haya terminado de usar el tipo, debe eliminarlo directa o indirectamente. Para eliminar el tipo directamente, llame a su método Dispose en un bloque try/catch. Para eliminarlo indirectamente, use una construcción de lenguaje como using (en C#) o Using (en Visual Basic). Para obtener más información, vea la sección "Using an Object that Implements IDisposable" (Usar un objeto que implementa IDisposable) en el tema de interfaz IDisposable .

Al eliminar un Stream objeto se vacían los datos almacenados en búfer y básicamente se llama al Flush método. Dispose también libera recursos del sistema operativo, como identificadores de archivos, conexiones de red o memoria usadas para cualquier almacenamiento en búfer interno. La BufferedStream clase proporciona la capacidad de encapsular una secuencia almacenada en búfer alrededor de otra secuencia para mejorar el rendimiento de lectura y escritura.

A partir de .NET Framework 4.5, la Stream clase incluye métodos asincrónicos para simplificar las operaciones asincrónicas. Un método asincrónico contiene Async en su nombre, como ReadAsync, WriteAsync, CopyToAsyncy FlushAsync. Estos métodos permiten realizar operaciones de E/S intensivas en recursos sin bloquear el subproceso principal. Esta consideración de rendimiento es especialmente importante en una aplicación de la Tienda Windows 8.x o una aplicación de escritorio en la que una operación de secuencia que consume mucho tiempo puede bloquear el subproceso de la interfaz de usuario y hacer que la aplicación aparezca como si no estuviera funcionando. Los métodos asincrónicos se usan junto con las async palabras clave y await en Visual Basic y C#.

Cuando se usa en una aplicación de la Tienda Windows 8.x, Stream incluye dos métodos de extensión: AsInputStream y AsOutputStream. Estos métodos convierten un Stream objeto en una secuencia en Windows Runtime. También puedes convertir una secuencia en Windows Runtime en un Stream objeto mediante los AsStreamForRead métodos y AsStreamForWrite . Para obtener más información, vea How to: Convert Between .NET Framework Streams and Windows Runtime Streams (Cómo: Convertir entre secuencias de .NET Framework y flujos de Windows Runtime).

Algunas implementaciones de flujo realizan el almacenamiento en búfer local de los datos subyacentes para mejorar el rendimiento. Para estos flujos, puede usar el Flush método o FlushAsync para borrar los búferes internos y asegurarse de que todos los datos se han escrito en el origen de datos o el repositorio subyacentes.

Si necesita una secuencia sin memoria auxiliar (también conocida como cubo de bits), use el Null campo para recuperar una instancia de una secuencia diseñada para este propósito.

Notas a los implementadores

Al implementar una clase derivada de Stream, debe proporcionar implementaciones para los Read(Byte[], Int32, Int32) métodos y Write(Byte[], Int32, Int32) . Los métodos asincrónicos , WriteAsync(Byte[], Int32, Int32)y CopyToAsync(Stream) usan los métodos ReadAsync(Byte[], Int32, Int32)sincrónicos Read(Byte[], Int32, Int32) y Write(Byte[], Int32, Int32) en sus implementaciones. Por lo tanto, las implementaciones de Read(Byte[], Int32, Int32) y Write(Byte[], Int32, Int32) funcionarán correctamente con los métodos asincrónicos. Las implementaciones predeterminadas de ReadByte() y WriteByte(Byte) crean una nueva matriz de bytes de un solo elemento y, a continuación, llaman a las implementaciones de Read(Byte[], Int32, Int32) y Write(Byte[], Int32, Int32). Al derivar de Stream, se recomienda invalidar estos métodos para acceder al búfer interno, si tiene uno, para mejorar considerablemente el rendimiento. También debe proporcionar implementaciones de CanRead, , CanSeekFlush()LengthCanWrite, Position, , Seek(Int64, SeekOrigin)y .SetLength(Int64)

No invalide el Close() método, en su lugar, coloque toda la Stream lógica de limpieza en el Dispose(Boolean) método . Para obtener más información, vea Implementar un método Dispose.

Constructores

Nombre Description
Stream()

Inicializa una nueva instancia de la clase Stream.

Campos

Nombre Description
Null

Un Stream sin memoria auxiliar.

Propiedades

Nombre Description
CanRead

Cuando se reemplaza en una clase derivada, obtiene un valor que indica si la secuencia actual admite la lectura.

CanSeek

Cuando se reemplaza en una clase derivada, obtiene un valor que indica si la secuencia actual admite la búsqueda.

CanTimeout

Obtiene un valor que determina si la secuencia actual puede agotar el tiempo de espera.

CanWrite

Cuando se reemplaza en una clase derivada, obtiene un valor que indica si la secuencia actual admite la escritura.

Length

Cuando se reemplaza en una clase derivada, obtiene la longitud en bytes de la secuencia.

Position

Cuando se invalida en una clase derivada, obtiene o establece la posición dentro de la secuencia actual.

ReadTimeout

Obtiene o establece un valor, en milisegundos, que determina cuánto tiempo intentará leer la secuencia antes de que se agote el tiempo de espera.

WriteTimeout

Obtiene o establece un valor, en milisegundos, que determina cuánto tiempo intentará escribir la secuencia antes de que se agote el tiempo de espera.

Métodos

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

Inicia una operación de lectura asincrónica. (Considere la posibilidad de usar ReadAsync(Byte[], Int32, Int32) en su lugar).

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

Comienza una operación de escritura asincrónica. (Considere la posibilidad de usar WriteAsync(Byte[], Int32, Int32) en su lugar).

Close()

Cierra la secuencia actual y libera los recursos (como sockets y identificadores de archivo) asociados a la secuencia actual. En lugar de llamar a este método, asegúrese de que la secuencia se elimina correctamente.

CopyTo(Stream, Int32)

Lee los bytes de la secuencia actual y los escribe en otra secuencia mediante un tamaño de búfer especificado. Ambas posiciones de secuencias están avanzadas por el número de bytes copiados.

CopyTo(Stream)

Lee los bytes de la secuencia actual y los escribe en otra secuencia. Ambas posiciones de secuencias están avanzadas por el número de bytes copiados.

CopyToAsync(Stream, CancellationToken)

Lee asincrónicamente los bytes de la secuencia actual y los escribe en otra secuencia, mediante un token de cancelación especificado. Ambas posiciones de secuencias están avanzadas por el número de bytes copiados.

CopyToAsync(Stream, Int32, CancellationToken)

Lee asincrónicamente los bytes de la secuencia actual y los escribe en otra secuencia, mediante un tamaño de búfer y un token de cancelación especificados. Ambas posiciones de secuencias están avanzadas por el número de bytes copiados.

CopyToAsync(Stream, Int32)

Lee de forma asincrónica los bytes de la secuencia actual y los escribe en otra secuencia mediante un tamaño de búfer especificado. Ambas posiciones de secuencias están avanzadas por el número de bytes copiados.

CopyToAsync(Stream)

Lee asincrónicamente los bytes de la secuencia actual y los escribe en otra secuencia. Ambas posiciones de secuencias están avanzadas por el número de bytes copiados.

CreateObjRef(Type)

Crea un objeto que contiene toda la información pertinente necesaria para generar un proxy usado para comunicarse con un objeto remoto.

(Heredado de MarshalByRefObject)
CreateWaitHandle()
Obsoletos.
Obsoletos.
Obsoletos.

Asigna un WaitHandle objeto .

Dispose()

Libera todos los recursos usados por .Stream

Dispose(Boolean)

Libera los recursos no administrados utilizados por Stream y, opcionalmente, libera los recursos administrados.

DisposeAsync()

Libera de forma asincrónica los recursos no administrados usados por .Stream

EndRead(IAsyncResult)

Espera a que se complete la lectura asincrónica pendiente. (Considere la posibilidad de usar ReadAsync(Byte[], Int32, Int32) en su lugar).

EndWrite(IAsyncResult)

Finaliza una operación de escritura asincrónica. (Considere la posibilidad de usar WriteAsync(Byte[], Int32, Int32) en su lugar).

Equals(Object)

Determina si el objeto especificado es igual al objeto actual.

(Heredado de Object)
Flush()

Cuando se invalida en una clase derivada, borra todos los búferes de esta secuencia y hace que los datos almacenados en búfer se escriban en el dispositivo subyacente.

FlushAsync()

Borra de forma asincrónica todos los búferes de esta secuencia y hace que los datos almacenados en búfer se escriban en el dispositivo subyacente.

FlushAsync(CancellationToken)

Borra de forma asincrónica todos los búferes de esta secuencia, hace que los datos almacenados en búfer se escriban en el dispositivo subyacente y supervisa las solicitudes de cancelación.

GetHashCode()

Actúa como función hash predeterminada.

(Heredado de Object)
GetLifetimeService()
Obsoletos.

Recupera el objeto de servicio de duración actual que controla la directiva de duración de esta instancia.

(Heredado de MarshalByRefObject)
GetType()

Obtiene el Type objeto de la instancia actual.

(Heredado de Object)
InitializeLifetimeService()
Obsoletos.

Obtiene un objeto de servicio de duración para controlar la directiva de duración de esta instancia.

(Heredado de MarshalByRefObject)
MemberwiseClone()

Crea una copia superficial del objeto actual Object.

(Heredado de Object)
MemberwiseClone(Boolean)

Crea una copia superficial del objeto actual MarshalByRefObject .

(Heredado de MarshalByRefObject)
ObjectInvariant()
Obsoletos.

Proporciona compatibilidad con .Contract

Read(Byte[], Int32, Int32)

Cuando se reemplaza en una clase derivada, lee una secuencia de bytes de la secuencia actual y avanza la posición dentro de la secuencia por el número de bytes leídos.

Read(Span<Byte>)

Cuando se reemplaza en una clase derivada, lee una secuencia de bytes de la secuencia actual y avanza la posición dentro de la secuencia por el número de bytes leídos.

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

Lee de forma asincrónica una secuencia de bytes de la secuencia actual, avanza la posición dentro de la secuencia por el número de bytes leídos y supervisa las solicitudes de cancelación.

ReadAsync(Byte[], Int32, Int32)

Lee de forma asincrónica una secuencia de bytes de la secuencia actual y avanza la posición dentro de la secuencia por el número de bytes leídos.

ReadAsync(Memory<Byte>, CancellationToken)

Lee de forma asincrónica una secuencia de bytes de la secuencia actual, avanza la posición dentro de la secuencia por el número de bytes leídos y supervisa las solicitudes de cancelación.

ReadAtLeast(Span<Byte>, Int32, Boolean)

Lee al menos un número mínimo de bytes de la secuencia actual y avanza la posición dentro de la secuencia por el número de bytes leídos.

ReadAtLeastAsync(Memory<Byte>, Int32, Boolean, CancellationToken)

Lee de forma asincrónica al menos un número mínimo de bytes de la secuencia actual, avanza la posición dentro de la secuencia por el número de bytes leídos y supervisa las solicitudes de cancelación.

ReadByte()

Lee un byte de la secuencia y avanza la posición dentro de la secuencia por un byte, o devuelve -1 si está al final de la secuencia.

ReadExactly(Byte[], Int32, Int32)

count Lee el número de bytes de la secuencia actual y avanza la posición dentro de la secuencia.

ReadExactly(Span<Byte>)

Lee bytes de la secuencia actual y avanza la posición dentro de la secuencia hasta buffer que se rellena.

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

Lee count de forma asincrónica el número de bytes de la secuencia actual, avanza la posición dentro de la secuencia y supervisa las solicitudes de cancelación.

ReadExactlyAsync(Memory<Byte>, CancellationToken)

Lee de forma asincrónica los bytes de la secuencia actual, avanza la posición dentro de la secuencia hasta buffer que se rellena y supervisa las solicitudes de cancelación.

Seek(Int64, SeekOrigin)

Cuando se reemplaza en una clase derivada, establece la posición dentro de la secuencia actual.

SetLength(Int64)

Cuando se invalida en una clase derivada, establece la longitud de la secuencia actual.

Synchronized(Stream)

Crea un contenedor seguro para subprocesos (sincronizado) alrededor del objeto especificado Stream .

ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)
ValidateBufferArguments(Byte[], Int32, Int32)

Valida los argumentos proporcionados para leer y escribir métodos en Stream.

ValidateCopyToArguments(Stream, Int32)

Valida los argumentos proporcionados a los CopyTo(Stream, Int32) métodos o CopyToAsync(Stream, Int32, CancellationToken) .

Write(Byte[], Int32, Int32)

Cuando se reemplaza en una clase derivada, escribe una secuencia de bytes en la secuencia actual y avanza la posición actual dentro de esta secuencia por el número de bytes escritos.

Write(ReadOnlySpan<Byte>)

Cuando se reemplaza en una clase derivada, escribe una secuencia de bytes en la secuencia actual y avanza la posición actual dentro de esta secuencia por el número de bytes escritos.

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

Escribe de forma asincrónica una secuencia de bytes en la secuencia actual, avanza la posición actual dentro de esta secuencia por el número de bytes escritos y supervisa las solicitudes de cancelación.

WriteAsync(Byte[], Int32, Int32)

Escribe de forma asincrónica una secuencia de bytes en la secuencia actual y avanza la posición actual dentro de esta secuencia por el número de bytes escritos.

WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Escribe de forma asincrónica una secuencia de bytes en la secuencia actual, avanza la posición actual dentro de esta secuencia por el número de bytes escritos y supervisa las solicitudes de cancelación.

WriteByte(Byte)

Escribe un byte en la posición actual de la secuencia y avanza la posición dentro de la secuencia por un byte.

Implementaciones de interfaz explícitas

Nombre Description
IDisposable.Dispose()

Libera todos los recursos usados por .Stream

Métodos de extensión

Nombre Description
AsInputStream(Stream)

Convierte una secuencia administrada en .NET para aplicaciones de la Tienda Windows en un flujo de entrada en Windows Runtime.

AsOutputStream(Stream)

Convierte una secuencia administrada en .NET para aplicaciones de la Tienda Windows en un flujo de salida en Windows Runtime.

AsRandomAccessStream(Stream)

Convierte la secuencia especificada en una secuencia de acceso aleatorio.

ConfigureAwait(IAsyncDisposable, Boolean)

Configura cómo se realizarán las esperas en las tareas devueltas desde un descartable asincrónico.

CopyToAsync(Stream, PipeWriter, CancellationToken)

Lee asincrónicamente los bytes de Stream y los escribe en el especificado PipeWritermediante un token de cancelación.

Se aplica a

Consulte también