Stream Класс

Определение

Предоставляет универсальное представление последовательности байтов. Этот класс является абстрактным.

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
Наследование
Stream
Наследование
Производный
Атрибуты
Реализации

Примеры

В следующем примере показано, как использовать два FileStream объекта для асинхронного копирования файлов из одного каталога в другой. Класс FileStream является производным от класса Stream . Обратите внимание, что обработчик событий Click для элемента управления Button помечается с помощью модификатора async , так как вызывает асинхронный метод.

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

Комментарии

Stream является абстрактным базовым классом для всех потоков. Поток - это абстракция последовательности байтов, например файла, устройства ввода-вывода, межпроцессного канала связи или сокета TCP/IP. StreamКласс и его производные классы предоставляют общее представление этих различных типов входных и выходных данных и изолируют программиста от конкретных деталей операционной системы и базовых устройств.

Потоки включают три основные операции:

  • Можно выполнять чтение из потоков. Чтение — это передача данных из потока в структуру данных, например массив байтов.

  • Можно выполнять запись в потоки. Запись — это передача данных из структуры данных в поток.

  • Потоки может поддерживать поиск. Поиск ссылается на запрос и изменение текущей позицией в потоке. Возможность поиска зависит от типа резервного хранилища, в котором находится поток. Например, сетевые потоки не имеют единой концепции текущей должности, поэтому обычно не поддерживают поиск.

Некоторые из наиболее часто используемых потоков, наследующих от Stream FileStream , — и MemoryStream .

В зависимости от базового источника данных или репозитория потоки могут поддерживать только некоторые из этих возможностей. Вы можете запросить его возможности в потоке с помощью CanRead свойств, CanWrite и CanSeek Stream класса.

ReadМетоды и Write считывают и записывают данные в различных форматах. Для потоков, поддерживающих поиск, используйте Seek SetLength методы и и Position Свойства и, Length чтобы запросить и изменить текущую и длину потока.

Этот тип реализует интерфейс IDisposable. По окончании использования выдаленную ему память следует прямо или косвенно освободить. Чтобы сделать это прямо, вызовите его метод Dispose в блоке try/catch. Чтобы сделать это косвенно, используйте языковые конструкции, такие как using (в C#) или Using (в Visual Basic). Дополнительные сведения см. в разделе "Использование объекта, реализующего IDisposable" в статье об интерфейсе IDisposable.

Удаление объекта приводит к Stream сбросу всех буферизованных данных и, по сути, вызывает Flush метод. Dispose также освобождает ресурсы операционной системы, такие как дескрипторы файлов, сетевые подключения или память, используемые для любой внутренней буферизации. BufferedStreamКласс предоставляет возможность упаковки буферизованного потока вокруг другого потока для повышения производительности чтения и записи.

начиная с платформа .NET Framework 4,5, Stream класс включает асинхронные методы для упрощения асинхронных операций. Асинхронный метод содержит Async в своем имени, например ReadAsync ,, WriteAsync CopyToAsync и FlushAsync . Эти методы позволяют выполнять ресурсоемкие операции ввода-вывода без блокировки основного потока. Это соображение, связанное с производительностью, особенно важно в приложениях Магазина Windows 8.x и классических приложениях, в которых длительная потоковая операция может блокировать поток пользовательского интерфейса и создавать впечатление, что приложение не работает. асинхронные методы используются в сочетании с async await ключевыми словами и в Visual Basic и C#.

при использовании в приложении для магазина Windows 8. x Stream включает два метода расширения: AsInputStream и AsOutputStream . эти методы преобразуют Stream объект в поток в среда выполнения Windows. также можно преобразовать поток в среда выполнения Windows в Stream объект с помощью AsStreamForRead AsStreamForWrite методов и. дополнительные сведения см . в разделе практические руководства. преобразование между платформа .NET Framework Потоки и среда выполнения Windows Потоки

Некоторые реализации потоков выполняют локальную буферизацию базовых данных для повышения производительности. Для таких потоков можно использовать Flush метод или, FlushAsync чтобы очистить все внутренние буферы и убедиться, что все данные записаны в базовый источник данных или репозиторий.

Если вам нужен поток без резервного хранилища (также известный как битовый контейнер), используйте Null поле для получения экземпляра потока, предназначенного для этой цели.

Примечания для тех, кто реализует этот метод

При реализации класса, производного от Stream , необходимо предоставить реализации для Read(Byte[], Int32, Int32) Write(Byte[], Int32, Int32) методов и. Асинхронные методы ReadAsync(Byte[], Int32, Int32) , WriteAsync(Byte[], Int32, Int32) и CopyToAsync(Stream) используют синхронные методы Read(Byte[], Int32, Int32) и Write(Byte[], Int32, Int32) в своих реализациях. Поэтому реализации Read(Byte[], Int32, Int32) и Write(Byte[], Int32, Int32) будут правильно работать с асинхронными методами. Реализации по умолчанию ReadByte() и WriteByte(Byte) создают новый одноэлементный массив байтов, а затем вызывают реализации методов Read(Byte[], Int32, Int32) и Write(Byte[], Int32, Int32) . При наследовании от рекомендуется Stream переопределять эти методы для доступа к внутреннему буферу, если таковой имеется, для значительно лучшей производительности. Необходимо также предоставить реализации CanRead , CanSeek , CanWrite , Flush() , Length , Position , Seek(Int64, SeekOrigin) и SetLength(Int64) .

Не переопределяйте Close() метод, вместо этого следует разместить всю Stream логику очистки в Dispose(Boolean) методе. Дополнительные сведения см. в разделе Реализация метода Dispose.

Конструкторы

Stream()

Инициализирует новый экземпляр класса Stream.

Поля

Null

Объект Stream без резервного хранилища.

Свойства

CanRead

При переопределении в производном классе возвращает значение, показывающее, поддерживает ли текущий поток возможность чтения.

CanSeek

При переопределении в производном классе возвращает значение, которое показывает, поддерживается ли в текущем потоке возможность поиска.

CanTimeout

Возвращает значение, которое показывает, может ли для данного потока истечь время ожидания.

CanWrite

При переопределении в производном классе возвращает значение, которое показывает, поддерживает ли текущий поток возможность записи.

Length

При переопределении в производном классе получает длину потока в байтах.

Position

При переопределении в производном классе получает или задает позицию в текущем потоке.

ReadTimeout

Возвращает или задает значение в миллисекундах, определяющее период времени, отведенного потоку на выполнение операции чтения.

WriteTimeout

Возвращает или задает значение в миллисекундах, определяющее период времени, отведенного потоку на выполнение операции записи.

Методы

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

Начинает операцию асинхронного чтения. (Рекомендуется использовать ReadAsync(Byte[], Int32, Int32).)

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

Начинает операцию асинхронной записи. (Рекомендуется использовать WriteAsync(Byte[], Int32, Int32).)

Close()

Закрывает текущий поток и отключает все ресурсы (например, сокеты и файловые дескрипторы), связанные с текущим потоком. Вместо вызова данного метода, убедитесь в том, что поток надлежащим образом ликвидирован.

CopyTo(Stream)

Считывает байты из текущего потока и записывает их в другой поток.

CopyTo(Stream, Int32)

Считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера.

CopyToAsync(Stream)

Асинхронно считывает байты из текущего потока и записывает их в другой поток.

CopyToAsync(Stream, CancellationToken)

Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный токен отмены.

CopyToAsync(Stream, Int32)

Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера.

CopyToAsync(Stream, Int32, CancellationToken)

Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера и токен отмены.

CreateObjRef(Type)

Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом.

(Унаследовано от MarshalByRefObject)
CreateWaitHandle()
Является устаревшей.
Является устаревшей.

Выделяет объект WaitHandle.

Dispose()

Освобождает все ресурсы, занятые модулем Stream.

Dispose(Boolean)

Освобождает неуправляемые ресурсы, используемые объектом Stream, а при необходимости освобождает также управляемые ресурсы.

DisposeAsync()

Асинхронно освобождает неуправляемые ресурсы, используемые классом Stream.

EndRead(IAsyncResult)

Ожидает завершения отложенного асинхронного чтения. (Рекомендуется использовать ReadAsync(Byte[], Int32, Int32).)

EndWrite(IAsyncResult)

Заканчивает операцию асинхронной записи. (Рекомендуется использовать WriteAsync(Byte[], Int32, Int32).)

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
Flush()

При переопределении в производном классе очищает все буферы данного потока и вызывает запись данных буферов в базовое устройство.

FlushAsync()

Асинхронно очищает все буферы для этого потока и вызывает запись всех буферизованных данных в базовое устройство.

FlushAsync(CancellationToken)

Асинхронно очищает все буферы данного потока, вызывает запись буферизованных данных в базовое устройство и отслеживает запросы отмены.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetLifetimeService()
Является устаревшей.

Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра.

(Унаследовано от MarshalByRefObject)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
InitializeLifetimeService()
Является устаревшей.

Получает объект службы времени существования для управления политикой времени существования для этого экземпляра.

(Унаследовано от MarshalByRefObject)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
MemberwiseClone(Boolean)

Создает неполную копию текущего объекта MarshalByRefObject.

(Унаследовано от MarshalByRefObject)
ObjectInvariant()
Является устаревшей.

Обеспечивает поддержку для Contract.

Read(Byte[], Int32, Int32)

При переопределении в производном классе считывает последовательность байтов из текущего потока и перемещает позицию в потоке на число считанных байтов.

Read(Span<Byte>)

При переопределении в производном классе считывает последовательность байтов из текущего потока и перемещает позицию в потоке на число считанных байтов.

ReadAsync(Byte[], Int32, Int32)

Асинхронно считывает последовательность байтов из текущего потока и перемещает позицию внутри потока на число считанных байтов.

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

Асинхронно считывает последовательность байтов из текущего потока, перемещает позицию в потоке на число считанных байтов и отслеживает запросы отмены.

ReadAsync(Memory<Byte>, CancellationToken)

Асинхронно считывает последовательность байтов из текущего потока, перемещает позицию в потоке на число считанных байтов и отслеживает запросы отмены.

ReadByte()

Считывает байт из потока и перемещает позицию в потоке на один байт или возвращает -1, если достигнут конец потока.

Seek(Int64, SeekOrigin)

При переопределении в производном классе задает позицию в текущем потоке.

SetLength(Int64)

При переопределении в производном классе задает длину текущего потока.

Synchronized(Stream)

Создает потокобезопасную (синхронизированную) оболочку для заданного объекта Stream.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)
ValidateBufferArguments(Byte[], Int32, Int32)

Проверяет аргументы, предоставленные для чтения и записи методов в Stream .

ValidateCopyToArguments(Stream, Int32)

Проверяет аргументы, предоставленные CopyTo(Stream, Int32) CopyToAsync(Stream, Int32, CancellationToken) методам или.

Write(Byte[], Int32, Int32)

При переопределении в производном классе записывает последовательность байтов в текущий поток и перемещает текущую позицию в нем вперед на число записанных байтов.

Write(ReadOnlySpan<Byte>)

При переопределении в производном классе записывает последовательность байтов в текущий поток и перемещает текущую позицию в нем вперед на число записанных байтов.

WriteAsync(Byte[], Int32, Int32)

Асинхронно записывает последовательность байтов в текущий поток и перемещает текущую позицию внутри потока на число записанных байтов.

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

Асинхронно записывает последовательность байтов в текущий поток, перемещает текущую позицию внутри потока на число записанных байтов и отслеживает запросы отмены.

WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Асинхронно записывает последовательность байтов в текущий поток, перемещает текущую позицию внутри потока на число записанных байтов и отслеживает запросы отмены.

WriteByte(Byte)

Записывает байт в текущее положение в потоке и перемещает позицию в потоке вперед на один байт.

Явные реализации интерфейса

IDisposable.Dispose()

Освобождает все ресурсы, занятые модулем Stream.

Методы расширения

AsInputStream(Stream)

Преобразует управляемый поток в .NET для приложений Магазина Windows во входной поток в среде выполнения Windows.

AsOutputStream(Stream)

Преобразует управляемый поток в .NET для приложений Магазина Windows в поток вывода в среде выполнения Windows.

AsRandomAccessStream(Stream)

Преобразует заданный поток в поток прямого доступа.

ConfigureAwait(IAsyncDisposable, Boolean)

Настраивает способ выполнения ожиданий для задач, возвращаемых из асинхронного высвобождаемого объекта.

Применяется к

См. также раздел