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 オブジェクトを使用して、1 つのディレクトリから別のディレクトリにファイルを非同期的にコピーする方法を示します。 FileStream クラスは、Stream クラスから派生します。 Button コントロールの Click イベント ハンドラーは、非同期メソッドを呼び出すので、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です。

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

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

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

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

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

Windows 8.x ストア アプリで使用する場合、Stream には、AsInputStreamAsOutputStreamの 2 つの拡張メソッドが含まれています。 これらのメソッドは、Stream オブジェクトを Windows ランタイムのストリームに変換します。 AsStreamForRead メソッドと AsStreamForWrite メソッドを使用して、Windows ランタイムのストリームを Stream オブジェクトに変換することもできます。 詳細については、「方法: .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から派生する場合は、パフォーマンスを大幅に向上させるために、内部バッファーがある場合は、これらのメソッドをオーバーライドして内部バッファーにアクセスすることをお勧めします。 また、CanReadCanSeekCanWriteFlush()LengthPositionSeek(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)

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

ReadAtLeast(Span<Byte>, Int32, Boolean)

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

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

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

ReadByte()

ストリームからバイトを読み取り、ストリーム内の位置を 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)

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で使用されているすべてのリソースを解放します。

拡張メソッド

CopyToAsync(Stream, PipeWriter, CancellationToken)

キャンセル トークンを使用して、Stream からバイトを非同期に読み取り、指定した PipeWriterに書き込みます。

AsInputStream(Stream)

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

AsOutputStream(Stream)

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

AsRandomAccessStream(Stream)

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

ConfigureAwait(IAsyncDisposable, Boolean)

非同期破棄から返されるタスクの待機を実行する方法を構成します。

適用対象

こちらもご覧ください