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 つの オブジェクトを使用して、1 つのディレクトリから別のディレクトリにファイルを非同期 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

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

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

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

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

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

Windows 8.x ストア アプリで使用する場合は、 と の 2 Stream つの拡張メソッドが含 AsInputStream まれます AsOutputStream 。 これらのメソッドは、オブジェクト Stream をランタイムのストリームにWindowsします。 メソッドと メソッドを使用して、Windows Runtime のストリームを オブジェクト Stream AsStreamForReadAsStreamForWrite 変換することもできます。 詳細については、「方法: ランタイム とランタイム の間で.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 バイトを読み取り、ストリーム内の位置を 1 バイト進めます。ストリームの末尾の場合は -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)

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

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

IDisposable.Dispose()

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

拡張メソッド

AsInputStream(Stream)

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

AsOutputStream(Stream)

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

AsRandomAccessStream(Stream)

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

ConfigureAwait(IAsyncDisposable, Boolean)

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

適用対象

こちらもご覧ください