Данная статья переведена с помощью средств машинного перевода. Чтобы просмотреть ее на английском языке, установите флажок Английский. Вы также можете просматривать английский текст во всплывающем окне, наводя указатель мыши на переведенный текст.
Перевод
Английский

Класс Stream

 

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

Для просмотра исходного кода .NET Framework для этого типа, в разделе Reference Source.

Пространство имен:   System.IO
Сборка:  mscorlib (в mscorlib.dll)


[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class Stream : MarshalByRefObject, IDisposable

ИмяОписание
System_CAPS_protmethodStream()

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

ИмяОписание
System_CAPS_pubpropertyCanRead

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

System_CAPS_pubpropertyCanSeek

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

System_CAPS_pubpropertyCanTimeout

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

System_CAPS_pubpropertyCanWrite

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

System_CAPS_pubpropertyLength

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

System_CAPS_pubpropertyPosition

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

System_CAPS_pubpropertyReadTimeout

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

System_CAPS_pubpropertyWriteTimeout

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

ИмяОписание
System_CAPS_pubmethodBeginRead(Byte[], Int32, Int32, AsyncCallback, Object)

Начинает операцию асинхронного чтения. (Попробуйте вместо этого использовать метод ReadAsync; см. раздел "Примечания".)

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

Начинает операцию асинхронной записи. (Попробуйте вместо этого использовать метод WriteAsync; см. раздел "Примечания".)

System_CAPS_pubmethodClose()

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

System_CAPS_pubmethodCopyTo(Stream)

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

System_CAPS_pubmethodCopyTo(Stream, Int32)

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

System_CAPS_pubmethodCopyToAsync(Stream)

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

System_CAPS_pubmethodCopyToAsync(Stream, Int32)

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

System_CAPS_pubmethodCopyToAsync(Stream, Int32, CancellationToken)

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

System_CAPS_pubmethodCreateObjRef(Type)

Создает объект, который содержит все необходимые сведения, необходимые для создания прокси-сервер, используемый для обмена данными с удаленным объектом.(Наследуется от MarshalByRefObject.)

System_CAPS_protmethodCreateWaitHandle()

Устарело. Выделяет объект WaitHandle.

System_CAPS_pubmethodDispose()

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

System_CAPS_protmethodDispose(Boolean)

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

System_CAPS_pubmethodEndRead(IAsyncResult)

Ожидает завершения отложенного асинхронного чтения. (Попробуйте вместо этого использовать метод ReadAsync; см. раздел "Примечания".)

System_CAPS_pubmethodEndWrite(IAsyncResult)

Заканчивает операцию асинхронной записи. (Попробуйте вместо этого использовать метод WriteAsync; см. раздел "Примечания".)

System_CAPS_pubmethodEquals(Object)

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

System_CAPS_protmethodFinalize()

Позволяет объекту попытаться освободить ресурсы и выполнить другие операции очистки, перед тем как он будет уничтожен во время сборки мусора.(Наследуется от Object.)

System_CAPS_pubmethodFlush()

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

System_CAPS_pubmethodFlushAsync()

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

System_CAPS_pubmethodFlushAsync(CancellationToken)

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

System_CAPS_pubmethodGetHashCode()

Служит хэш-функцией по умолчанию.(Наследуется от Object.)

System_CAPS_pubmethodGetLifetimeService()

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

System_CAPS_pubmethodGetType()

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

System_CAPS_pubmethodInitializeLifetimeService()

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

System_CAPS_protmethodMemberwiseClone()

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

System_CAPS_protmethodMemberwiseClone(Boolean)

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

System_CAPS_protmethodObjectInvariant()

Устарело. Этот API поддерживает инфраструктуру продукт, и его не следует использовать напрямую из кода. Обеспечивает поддержку для Contract.

System_CAPS_pubmethodRead(Byte[], Int32, Int32)

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

System_CAPS_pubmethodReadAsync(Byte[], Int32, Int32)

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

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

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

System_CAPS_pubmethodReadByte()

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

System_CAPS_pubmethodSeek(Int64, SeekOrigin)

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

System_CAPS_pubmethodSetLength(Int64)

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

System_CAPS_pubmethodSystem_CAPS_staticSynchronized(Stream)

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

System_CAPS_pubmethodToString()

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

System_CAPS_pubmethodWrite(Byte[], Int32, Int32)

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

System_CAPS_pubmethodWriteAsync(Byte[], Int32, Int32)

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

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

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

System_CAPS_pubmethodWriteByte(Byte)

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

ИмяОписание
System_CAPS_pubfieldSystem_CAPS_staticNull

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

System_CAPS_noteПримечание

Исходный код .NET Framework для этого типа см. в разделе Reference Source. Выполнять поиск исходного кода в Интернете, справочник для автономной работы и пошагово источники (включая исправления и обновления) во время отладки; see instructions.

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 и Write методы. Асинхронные методы ReadAsync, WriteAsync, и CopyToAsync использовать синхронные методы Read и Write в их реализации. Таким образом, реализации методов Read и Write будет правильно работать с асинхронными методами. Реализация по умолчанию ReadByte и WriteByte создать новый массив одноэлементных байт, а затем вызвать реализации методов Read и Write. При наследовании от Stream, рекомендуется переопределять эти методы для доступа к к внутреннему буферу и, если она есть, существенно повысить производительность. Предоставьте реализации CanRead, CanSeek, CanWrite, Flush, Length, Position, Seek, и SetLength.

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

Следующий пример демонстрирует использование двух 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);
                    }
                }
            }
        }
    }
}

Универсальная платформа Windows
Доступно с 8
.NET Framework
Доступно с 1.1
Переносимая библиотека классов
Поддерживается в: переносимые платформы .NET
Silverlight
Доступно с 2.0
Windows Phone Silverlight
Доступно с 7.0
Windows Phone
Доступно с 8.1

Любые открытые статические элементы ( Предоставлен общий доступ в Visual Basic) этого типа являются потокобезопасными. Потокобезопасность элементов экземпляров не гарантируется.

Вернуться в начало
Показ: