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 つの基本的な操作が含まれます。

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

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

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

から継承する一般的に使用されるストリームに StreamFileStream 、、、およびがあり MemoryStream ます。

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

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

Windows 8. x ストアアプリで使用する場合、には、 Stream とという2つの拡張メソッドが含まれます。 AsInputStream AsOutputStream これらのメソッドは Stream 、オブジェクトを Windows ランタイム内のストリームに変換します。 また、 Stream メソッドとメソッドを使用して、Windows ランタイム内のストリームをオブジェクトに変換することもでき AsStreamForRead AsStreamForWrite ます。 詳細については、「方法: .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)

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

適用対象

こちらもご覧ください