Stream Класс

Определение

Предоставляет универсальное представление последовательности байтов.Provides a generic view of a sequence of bytes. Этот класс является абстрактным.This is an abstract class.

public ref class Stream abstract : MarshalByRefObject, IDisposable
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public abstract class Stream : MarshalByRefObject, IDisposable
type Stream = class
    inherit MarshalByRefObject
    interface IDisposable
Public MustInherit Class Stream
Inherits MarshalByRefObject
Implements IDisposable
Наследование
Производный
Атрибуты
Реализации

Примеры

В следующем примере показано, как использовать два FileStream объекта для асинхронного копирования файлов из одного каталога в другой.The following example demonstrates how to use two FileStream objects to asynchronously copy the files from one directory to another directory. Класс FileStream является производным от класса Stream .The FileStream class derives from the Stream class. Обратите внимание, что обработчик событий Click для элемента управления Button помечается с помощью модификатора async , так как вызывает асинхронный метод.Notice that the Click event handler for the Button control is marked with the async modifier because it calls an asynchronous method.

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является абстрактным базовым классом для всех потоков.Stream is the abstract base class of all streams. Поток - это абстракция последовательности байтов, например файла, устройства ввода-вывода, межпроцессного канала связи или сокета TCP/IP.A stream is an abstraction of a sequence of bytes, such as a file, an input/output device, an inter-process communication pipe, or a TCP/IP socket. Stream Класс и его производные классы предоставляют общее представление этих различных типов входных и выходных данных и изолируют программиста от конкретных деталей операционной системы и базовых устройств.The Stream class and its derived classes provide a generic view of these different types of input and output, and isolate the programmer from the specific details of the operating system and the underlying devices.

Потоки включают три основные операции:Streams involve three fundamental operations:

  • Можно выполнять чтение из потоков.You can read from streams. Чтение — это передача данных из потока в структуру данных, например массив байтов.Reading is the transfer of data from a stream into a data structure, such as an array of bytes.

  • Можно выполнять запись в потоки.You can write to streams. Запись — это передача данных из структуры данных в поток.Writing is the transfer of data from a data structure into a stream.

  • Потоки могут поддерживать поиск.Streams can support seeking. Поиск ссылается на запрос и изменение текущей позицией в потоке.Seeking refers to querying and modifying the current position within a stream. Возможность поиска зависит от типа резервного хранилища, в котором находится поток.Seek capability depends on the kind of backing store a stream has. Например, сетевые потоки не имеют единой концепции текущей должности, поэтому обычно не поддерживают поиск.For example, network streams have no unified concept of a current position, and therefore typically do not support seeking.

Некоторые из наиболее часто используемых потоков, наследующих от Stream , FileStream— и MemoryStream.Some of the more commonly used streams that inherit from Stream are FileStream, and MemoryStream.

В зависимости от базового источника данных или репозитория потоки могут поддерживать только некоторые из этих возможностей.Depending on the underlying data source or repository, streams might support only some of these capabilities. Вы можете запросить CanReadего возможности в потоке с помощью свойств Stream , CanWriteи CanSeek класса.You can query a stream for its capabilities by using the CanRead, CanWrite, and CanSeek properties of the Stream class.

Методы Read иWrite считывают и записывают данные в различных форматах.The Read and Write methods read and write data in a variety of formats. Для потоков, поддерживающих поиск, используйте Seek методы SetLength и и Position свойства и Length , чтобы запросить и изменить текущую и длину потока.For streams that support seeking, use the Seek and SetLength methods and the Position and Length properties to query and modify the current position and length of a stream.

Этот тип реализует интерфейс IDisposable.This type implements the IDisposable interface. По окончании использования выдаленную ему память следует прямо или косвенно освободить.When you have finished using the type, you should dispose of it either directly or indirectly. Чтобы сделать это прямо, вызовите его метод Dispose в блоке try/catch.To dispose of the type directly, call its Dispose method in a try/catch block. Чтобы сделать это косвенно, используйте языковые конструкции, такие как using (в C#) или Using (в Visual Basic).To dispose of it indirectly, use a language construct such as using (in C#) or Using (in Visual Basic). Дополнительные сведения см. в разделе "Использование объекта, реализующего IDisposable" в статье об интерфейсе IDisposable.For more information, see the "Using an Object that Implements IDisposable" section in the IDisposable interface topic.

Удаление объекта приводит к сбросу всех буферизованных данных и, по сути, Flush вызывает метод. StreamDisposing a Stream object flushes any buffered data, and essentially calls the Flush method for you. Disposeтакже освобождает ресурсы операционной системы, такие как дескрипторы файлов, сетевые подключения или память, используемые для любой внутренней буферизации.Dispose also releases operating system resources such as file handles, network connections, or memory used for any internal buffering. BufferedStream Класс предоставляет возможность упаковки буферизованного потока вокруг другого потока для повышения производительности чтения и записи.The BufferedStream class provides the capability of wrapping a buffered stream around another stream in order to improve read and write performance.

Начиная с .NET Framework 4.5.NET Framework 4.5 Stream , класс включает асинхронные методы для упрощения асинхронных операций.Starting with the .NET Framework 4.5.NET Framework 4.5, the Stream class includes async methods to simplify asynchronous operations. Асинхронный метод содержит Async в своем имени, ReadAsyncнапример, WriteAsync CopyToAsync, и FlushAsync.An async method contains Async in its name, such as ReadAsync, WriteAsync, CopyToAsync, and FlushAsync. Эти методы позволяют выполнять ресурсоемкие операции ввода-вывода без блокировки основного потока.These methods enable you to perform resource-intensive I/O operations without blocking the main thread. Это соображение, связанное с производительностью, особенно важно в приложениях Магазин Windows 8.xWindows 8.x Store и для настольных системdesktop , где длительная потоковая операция может блокировать поток пользовательского интерфейса и создавать впечатление, что приложение не работает.This performance consideration is particularly important in a Магазин Windows 8.xWindows 8.x Store app or для настольных системdesktop app where a time-consuming stream operation can block the UI thread and make your app appear as if it is not working. Асинхронные методы используются в сочетании с async ключевыми словами и await в Visual Basic и C#.The async methods are used in conjunction with the async and await keywords in Visual Basic and C#.

При Магазин Windows 8.xWindows 8.x Store использовании в Stream приложении включает два метода расширения: AsInputStream и AsOutputStream.When used in a Магазин Windows 8.xWindows 8.x Store app, Stream includes two extension methods: AsInputStream and AsOutputStream. Эти методы преобразуют Stream объект в поток Среда выполнения WindowsWindows Runtimeв.These methods convert a Stream object to a stream in the Среда выполнения WindowsWindows Runtime. Можно Среда выполнения WindowsWindows Runtime также преобразовать поток в Stream в объект с помощью AsStreamForRead методов и AsStreamForWrite .You can also convert a stream in the Среда выполнения WindowsWindows Runtime to a Stream object by using the AsStreamForRead and AsStreamForWrite methods. Дополнительные сведения см. в разделе Практическое руководство. Преобразование между потоками .NET Framework и потоками среды выполнения WindowsFor more information, see How to: Convert Between .NET Framework Streams and Windows Runtime Streams

Некоторые реализации потоков выполняют локальную буферизацию базовых данных для повышения производительности.Some stream implementations perform local buffering of the underlying data to improve performance. Для таких потоков можно использовать Flush метод или FlushAsync , чтобы очистить все внутренние буферы и убедиться, что все данные записаны в базовый источник данных или репозиторий.For such streams, you can use the Flush or FlushAsync method to clear any internal buffers and ensure that all data has been written to the underlying data source or repository.

Если вам нужен поток без резервного хранилища (также известный как битовый контейнер), используйте Null поле для получения экземпляра потока, предназначенного для этой цели.If you need a stream with no backing store (also known as a bit bucket), use the Null field to retrieve an instance of a stream that is designed for this purpose.

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

При реализации класса, производного от Stream, необходимо предоставить реализации Read(Byte[], Int32, Int32) для методов и Write(Byte[], Int32, Int32) .When you implement a derived class of Stream, you must provide implementations for the Read(Byte[], Int32, Int32) and Write(Byte[], Int32, Int32) methods. Асинхронные методы ReadAsync(Byte[], Int32, Int32), WriteAsync(Byte[], Int32, Int32)и CopyToAsync(Stream) используют синхронные методы Read(Byte[], Int32, Int32) и Write(Byte[], Int32, Int32) в своих реализациях.The asynchronous methods ReadAsync(Byte[], Int32, Int32), WriteAsync(Byte[], Int32, Int32), and CopyToAsync(Stream) use the synchronous methods Read(Byte[], Int32, Int32) and Write(Byte[], Int32, Int32) in their implementations. Поэтому реализации Read(Byte[], Int32, Int32) и Write(Byte[], Int32, Int32) будут правильно работать с асинхронными методами.Therefore, your implementations of Read(Byte[], Int32, Int32) and Write(Byte[], Int32, Int32) will work correctly with the asynchronous methods. Реализации ReadByte() по умолчанию и WriteByte(Byte) создают новый одноэлементный массив байтов, а затем Read(Byte[], Int32, Int32) вызывают реализации методов и Write(Byte[], Int32, Int32).The default implementations of ReadByte() and WriteByte(Byte) create a new single-element byte array, and then call your implementations of Read(Byte[], Int32, Int32) and Write(Byte[], Int32, Int32). При наследовании от Streamрекомендуется переопределять эти методы для доступа к внутреннему буферу, если таковой имеется, для значительно лучшей производительности.When you derive from Stream, we recommend that you override these methods to access your internal buffer, if you have one, for substantially better performance. CanReadНеобходимо также предоставить реализации, CanSeek, CanWrite, Flush(), Length, ,Position иSetLength(Int64). Seek(Int64, SeekOrigin)You must also provide implementations of CanRead, CanSeek, CanWrite, Flush(), Length, Position, Seek(Int64, SeekOrigin), and SetLength(Int64).

Не переопределяйте Close() метод, вместо этого следует разместить Stream всю логику очистки в Dispose(Boolean) методе.Do not override the Close() method, instead, put all the Stream cleanup logic in the Dispose(Boolean) method. Дополнительные сведения см. в разделе Реализация метода Dispose.For more information, see Implementing a Dispose Method.

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

Stream()

Инициализирует новый экземпляр класса Stream.Initializes a new instance of the Stream class.

Поля

Null

Объект Stream без резервного хранилища.A Stream with no backing store.

Свойства

CanRead

При переопределении в производном классе возвращает значение, показывающее, поддерживает ли текущий поток возможность чтения.When overridden in a derived class, gets a value indicating whether the current stream supports reading.

CanSeek

При переопределении в производном классе возвращает значение, которое показывает, поддерживается ли в текущем потоке возможность поиска.When overridden in a derived class, gets a value indicating whether the current stream supports seeking.

CanTimeout

Получает значение, которое показывает, может ли для данного потока истечь время ожидания.Gets a value that determines whether the current stream can time out.

CanWrite

При переопределении в производном классе возвращает значение, которое показывает, поддерживает ли текущий поток возможность записи.When overridden in a derived class, gets a value indicating whether the current stream supports writing.

Length

При переопределении в производном классе получает длину потока в байтах.When overridden in a derived class, gets the length in bytes of the stream.

Position

При переопределении в производном классе получает или задает позицию в текущем потоке.When overridden in a derived class, gets or sets the position within the current stream.

ReadTimeout

Возвращает или задает значение в миллисекундах, определяющее период, в течение которого поток будет пытаться выполнить операцию чтения, прежде чем истечет время ожидания.Gets or sets a value, in milliseconds, that determines how long the stream will attempt to read before timing out.

WriteTimeout

Возвращает или задает значение в миллисекундах, определяющее период, в течение которого поток будет пытаться выполнить операцию записи, прежде чем истечет время ожидания.Gets or sets a value, in milliseconds, that determines how long the stream will attempt to write before timing out.

Методы

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

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

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

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

Close()

Закрывает текущий поток и отключает все ресурсы (например, сокеты и файловые дескрипторы), связанные с текущим потоком.Closes the current stream and releases any resources (such as sockets and file handles) associated with the current stream. Вместо вызова данного метода, убедитесь в том, что поток надлежащим образом ликвидирован.Instead of calling this method, ensure that the stream is properly disposed.

CopyTo(Stream)

Считывает байты из текущего потока и записывает их в другой поток.Reads the bytes from the current stream and writes them to another stream.

CopyTo(Stream, Int32)

Считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера.Reads the bytes from the current stream and writes them to another stream, using a specified buffer size.

CopyToAsync(Stream)

Асинхронно считывает байты из текущего потока и записывает их в другой поток.Asynchronously reads the bytes from the current stream and writes them to another stream.

CopyToAsync(Stream, CancellationToken)

Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный токен отмены.Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified cancellation token.

CopyToAsync(Stream, Int32)

Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера.Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified buffer size.

CopyToAsync(Stream, Int32, CancellationToken)

Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера и токен отмены.Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified buffer size and cancellation token.

CreateObjRef(Type)

Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом.Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object.

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

Размещает объект WaitHandle.Allocates a WaitHandle object.

Dispose()

Освобождает все ресурсы, занятые модулем Stream.Releases all resources used by the Stream.

Dispose(Boolean)

Освобождает неуправляемые ресурсы, используемые объектом Stream, а при необходимости освобождает также управляемые ресурсы.Releases the unmanaged resources used by the Stream and optionally releases the managed resources.

DisposeAsync()

Асинхронно освобождает неуправляемые ресурсы, используемые классом Stream.Asynchronously releases the unmanaged resources used by the Stream.

EndRead(IAsyncResult)

Ожидает завершения отложенного асинхронного чтения.Waits for the pending asynchronous read to complete. (Рекомендуется использовать ReadAsync(Byte[], Int32, Int32).)(Consider using ReadAsync(Byte[], Int32, Int32) instead.)

EndWrite(IAsyncResult)

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

Equals(Object)

Определяет, равен ли заданный объект текущему объекту.Determines whether the specified object is equal to the current object.

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

При переопределении в производном классе очищает все буферы данного потока и вызывает запись данных буферов в базовое устройство.When overridden in a derived class, clears all buffers for this stream and causes any buffered data to be written to the underlying device.

FlushAsync()

Асинхронно очищает все буферы для этого потока и вызывает запись всех буферизованных данных в базовое устройство.Asynchronously clears all buffers for this stream and causes any buffered data to be written to the underlying device.

FlushAsync(CancellationToken)

Асинхронно очищает все буферы данного потока, вызывает запись буферизованных данных в базовое устройство и отслеживает запросы отмены.Asynchronously clears all buffers for this stream, causes any buffered data to be written to the underlying device, and monitors cancellation requests.

GetHashCode()

Служит хэш-функцией по умолчанию.Serves as the default hash function.

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

Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра.Retrieves the current lifetime service object that controls the lifetime policy for this instance.

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

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

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

Получает объект службы времени существования для управления политикой времени существования для этого экземпляра.Obtains a lifetime service object to control the lifetime policy for this instance.

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

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

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

Создает неполную копию текущего объекта MarshalByRefObject.Creates a shallow copy of the current MarshalByRefObject object.

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

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

Read(Byte[], Int32, Int32)

При переопределении в производном классе считывает последовательность байтов из текущего потока и перемещает позицию в потоке на число считанных байтов.When overridden in a derived class, reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read.

Read(Span<Byte>)

При переопределении в производном классе считывает последовательность байтов из текущего потока и перемещает позицию в потоке на число считанных байтов.When overridden in a derived class, reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read.

ReadAsync(Byte[], Int32, Int32)

Асинхронно считывает последовательность байтов из текущего потока и перемещает позицию внутри потока на число считанных байтов.Asynchronously reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read.

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

Асинхронно считывает последовательность байтов из текущего потока, перемещает позицию в потоке на число считанных байтов и отслеживает запросы отмены.Asynchronously reads a sequence of bytes from the current stream, advances the position within the stream by the number of bytes read, and monitors cancellation requests.

ReadAsync(Memory<Byte>, CancellationToken)

Асинхронно считывает последовательность байтов из текущего потока, перемещает позицию в потоке на число считанных байтов и отслеживает запросы отмены.Asynchronously reads a sequence of bytes from the current stream, advances the position within the stream by the number of bytes read, and monitors cancellation requests.

ReadByte()

Считывает байт из потока и перемещает позицию в потоке на один байт или возвращает -1, если достигнут конец потока.Reads a byte from the stream and advances the position within the stream by one byte, or returns -1 if at the end of the stream.

Seek(Int64, SeekOrigin)

При переопределении в производном классе задает позицию в текущем потоке.When overridden in a derived class, sets the position within the current stream.

SetLength(Int64)

При переопределении в производном классе задает длину текущего потока.When overridden in a derived class, sets the length of the current stream.

Synchronized(Stream)

Создает потокобезопасную (синхронизированную) оболочку для заданного объекта Stream.Creates a thread-safe (synchronized) wrapper around the specified Stream object.

ToString()

Возвращает строку, представляющую текущий объект.Returns a string that represents the current object.

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

При переопределении в производном классе записывает последовательность байтов в текущий поток и перемещает текущую позицию в нем вперед на число записанных байтов.When overridden in a derived class, writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written.

Write(ReadOnlySpan<Byte>)

При переопределении в производном классе записывает последовательность байтов в текущий поток и перемещает текущую позицию в нем вперед на число записанных байтов.When overridden in a derived class, writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written.

WriteAsync(Byte[], Int32, Int32)

Асинхронно записывает последовательность байтов в текущий поток и перемещает текущую позицию внутри потока на число записанных байтов.Asynchronously writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written.

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

Асинхронно записывает последовательность байтов в текущий поток, перемещает текущую позицию внутри потока на число записанных байтов и отслеживает запросы отмены.Asynchronously writes a sequence of bytes to the current stream, advances the current position within this stream by the number of bytes written, and monitors cancellation requests.

WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Асинхронно записывает последовательность байтов в текущий поток, перемещает текущую позицию внутри потока на число записанных байтов и отслеживает запросы отмены.Asynchronously writes a sequence of bytes to the current stream, advances the current position within this stream by the number of bytes written, and monitors cancellation requests.

WriteByte(Byte)

Записывает байт в текущее положение в потоке и перемещает позицию в потоке вперед на один байт.Writes a byte to the current position in the stream and advances the position within the stream by one byte.

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

IDisposable.Dispose()

Освобождает все ресурсы, занятые модулем Stream.Releases all resources used by the Stream.

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

AsInputStream(Stream)

Преобразует управляемый поток в .NET для приложений Магазина Windows во входной поток в среде выполнения Windows.Converts a managed stream in the .NET for Windows Store apps to an input stream in the Windows Runtime.

AsOutputStream(Stream)

Преобразует управляемый поток в .NET для приложений Магазина Windows в поток вывода в среде выполнения Windows.Converts a managed stream in the .NET for Windows Store apps to an output stream in the Windows Runtime.

AsRandomAccessStream(Stream)

Преобразует заданный поток в поток прямого доступа.Converts the specified stream to a random access stream.

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

Дополнительно