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
継承
派生
属性
実装

次の例では、2 つの 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 、これらのさまざまな種類の入力と出力の一般的なビューを提供し、オペレーティング システムと基になるデバイスの特定の詳細からプログラマを分離します。

ストリームには次の 3 つの基本的な操作が含まれます。

  • ストリームから読み取ることができます。 読み取りは、ストリームからデータ構造 (バイト配列など) へのデータの転送です。

  • ストリームに書き込むことができます。 書き込みは、データ構造からストリームへのデータの転送です。

  • ストリームはシークをサポートできます。 シークとは、ストリーム内の現在位置のクエリと変更を指します。 シーク機能は、ストリームに含まれるバッキング ストアの種類によって異なります。 たとえば、ネットワーク ストリームには現在の位置の統一された概念がないため、通常はシークをサポートしていません。

を継承 Stream する一般的に使用されるストリームの一部は、 FileStreamと です MemoryStream

基になるデータ ソースまたはリポジトリによっては、ストリームでこれらの機能の一部のみがサポートされる場合があります。 クラスの 、、および CanSeek プロパティを使用CanReadCanWriteして、ストリームの機能をStream照会できます。

メソッドと Write メソッドはRead、さまざまな形式でデータの読み取りと書き込みを行います。 シークをサポートするストリームの場合は、 メソッドと SetLength メソッド、および PositionLength プロパティを使用Seekして、ストリームの現在の位置と長さを照会および変更します。

この型は IDisposable インターフェイスを実装します。 型の使用が完了したら、直接的または間接的に型を破棄する必要があります。 直接的に型を破棄するには、try/catch ブロック内で Dispose メソッドを呼び出します。 間接的に型を破棄するには、using (C# の場合) または Using (Visual Basic 言語) などの言語構成要素を使用します。 詳細については、IDisposable インターフェイスに関するトピック内の「IDisposable を実装するオブジェクトの使用」セクションを参照してください。

オブジェクトを破棄すると、 Stream バッファー内のデータがフラッシュされ、基本的に メソッドが Flush 呼び出されます。 Dispose また、ファイル ハンドル、ネットワーク接続、内部バッファリングに使用されるメモリなどのオペレーティング システム リソースも解放します。 クラスは BufferedStream 、読み取りと書き込みのパフォーマンスを向上させるために、別のストリームの周囲にバッファーストリームをラップする機能を提供します。

.NET Framework 4.5 以降では、 Stream クラスには非同期操作を簡略化するための非同期メソッドが含まれています。 非同期メソッドにはAsync、、、、 などのCopyToAsyncReadAsyncWriteAsyncFlushAsync名前が含まれています。 これらのメソッドを使用すると、メイン スレッドをブロックすることなく、リソースを大量に消費する I/O 操作を実行できます。 このパフォーマンスに関する考慮事項は、時間のかかるストリーム操作によって UI スレッドがブロックされ、アプリが動作していないと見なされる可能性がある Windows 8.x Store アプリまたはデスクトップ アプリで特に重要です。 非同期メソッドは、Visual Basic および C# の および await キーワードと組み合わせてasync使用されます。

Windows 8.x ストア アプリで使用する場合は、 StreamAsOutputStreamの 2 つの拡張メソッドがAsInputStream含まれます。 これらのメソッドは、オブジェクトを Stream Windows ランタイム内のストリームに変換します。 メソッドと AsStreamForWrite メソッドを使用して、Windows ランタイム内のストリームを Stream オブジェクトにAsStreamForRead変換することもできます。 詳細については、「方法: .NET Framework ストリームとWindows ランタイム ストリーム間で変換する」を参照してください。

一部のストリーム実装では、パフォーマンスを向上させるために、基になるデータのローカル バッファリングが実行されます。 このようなストリームの場合は、 メソッドまたは FlushAsync メソッドをFlush使用して内部バッファーをクリアし、すべてのデータが基になるデータ ソースまたはリポジトリに確実に書き込まれたことを確認できます。

バッキング ストアのないストリーム (ビット バケットとも呼ばれます) が必要な場合は、 フィールドを Null 使用して、この目的のために設計されたストリームのインスタンスを取得します。

注意 (実装者)

の派生クラスStreamを実装する場合は、 メソッドと Write(Byte[], Int32, Int32) メソッドの実装をRead(Byte[], Int32, Int32)指定する必要があります。 非同期メソッド ReadAsync(Byte[], Int32, Int32)、、 CopyToAsync(Stream)WriteAsync(Byte[], Int32, Int32)は、同期メソッドRead(Byte[], Int32, Int32)とそのWrite(Byte[], Int32, Int32)実装でを使用します。 したがって、 と Write(Byte[], Int32, Int32)Read(Byte[], Int32, Int32)実装は、非同期メソッドで正しく動作します。 の既定のReadByte()実装と WriteByte(Byte) 新しい 1 要素バイト配列を作成し、 と Write(Byte[], Int32, Int32)Read(Byte[], Int32, Int32)実装を呼び出します。 から Stream派生する場合は、パフォーマンスを大幅に向上させるために、内部バッファーがある場合は、これらのメソッドをオーバーライドしてアクセスすることをお勧めします。 、および SetLength(Int64)LengthCanSeekSeek(Int64, SeekOrigin)CanReadCanWriteFlush()Position実装も指定する必要があります。

メソッドを 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)

現在のストリームからバイト シーケンスを非同期に読み取り、読み取ったバイト数だけストリーム内の位置を進め、キャンセル要求を監視します。

ReadAtLeast(Span<Byte>, Int32, Boolean)

現在のストリームから少なくともバイト数を読み取り、ストリーム内の位置を読み取ったバイト数だけ進めます。

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

現在のストリームから少なくとも最小バイト数を非同期に読み取り、読み取ったバイト数だけストリーム内の位置を進め、キャンセル要求を監視します。

ReadByte()

ストリームから 1 バイトを読み取り、ストリーム内の位置を 1 バイト進めます。ストリームの末尾の場合は -1 を返します。

ReadExactly(Byte[], Int32, Int32)

現在のストリームからバイト数を読み取 count り、ストリーム内の位置を進めます。

ReadExactly(Span<Byte>)

現在のストリームからバイトを読み取り、 が塗りつぶされるまでストリーム内の位置を buffer 進めます。

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

現在のストリームからバイト数を非同期に読み取 count り、ストリーム内の位置を進め、取り消し要求を監視します。

ReadExactlyAsync(Memory<Byte>, CancellationToken)

現在のストリームからバイトを非同期に読み取り、 が満たされるまでストリーム内の位置を buffer 進め、取り消し要求を監視します。

Seek(Int64, SeekOrigin)

派生クラスでオーバーライドされた場合は、現在のストリーム内の位置を設定します。

SetLength(Int64)

派生クラスでオーバーライドされた場合は、現在のストリームの長さを設定します。

Synchronized(Stream)

指定した Stream オブジェクトをラップするスレッド セーフな (同期された) ラッパーを作成します。

ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)
ValidateBufferArguments(Byte[], Int32, Int32)

のメソッドの読み取りと書き込みに指定された引数を検証します Stream

ValidateCopyToArguments(Stream, Int32)

メソッドまたは CopyToAsync(Stream, Int32, CancellationToken) メソッドに指定された引数をCopyTo(Stream, Int32)検証します。

Write(Byte[], Int32, Int32)

派生クラスによってオーバーライドされた場合は、現在のストリームにバイト シーケンスを書き込み、書き込んだバイト数の分だけストリームの現在位置を進めます。

Write(ReadOnlySpan<Byte>)

派生クラスによってオーバーライドされた場合は、現在のストリームにバイト シーケンスを書き込み、書き込んだバイト数の分だけストリームの現在位置を進めます。

WriteAsync(Byte[], Int32, Int32)

現在のストリームにバイト シーケンスを非同期に書き込み、書き込んだバイト数だけストリーム内の現在位置を進めます。

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

現在のストリームにバイト シーケンスを非同期に書き込み、書き込んだバイト数だけストリーム内の現在位置を進め、キャンセル要求を監視します。

WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

現在のストリームにバイト シーケンスを非同期に書き込み、書き込んだバイト数だけストリーム内の現在位置を進め、キャンセル要求を監視します。

WriteByte(Byte)

ストリームの現在位置にバイトを書き込み、ストリームの位置を 1 バイトだけ進めます。

明示的なインターフェイスの実装

IDisposable.Dispose()

Stream によって使用されているすべてのリソースを解放します。

拡張メソッド

AsInputStream(Stream)

Windows ストア アプリ用 .NET のマネージド ストリームを Windows ランタイムの入力ストリームに変換します。

AsOutputStream(Stream)

Windows ストア アプリ用 .NET のマネージド ストリームを Windows ランタイムの出力ストリームに変換します。

AsRandomAccessStream(Stream)

特定のストリームをランダム アクセス ストリームに変換します。

ConfigureAwait(IAsyncDisposable, Boolean)

非同期の破棄可能から返されるタスク上での待機がどのように実行されるかを構成します。

適用対象

こちらもご覧ください