Stream クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
バイト シーケンスのジェネリック ビューを提供します。 これは抽象クラスです。
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される一般的に使用されるストリームの一部は、 と MemoryStreamですFileStream。
基になるデータ ソースまたはリポジトリによっては、ストリームでこれらの機能の一部のみがサポートされる場合があります。 クラスの 、、および CanSeek プロパティを使用して、CanReadCanWriteストリームの機能に対してクエリをStream実行できます。
メソッドと Write メソッドはRead、さまざまな形式でデータの読み取りと書き込みを行います。 シークをサポートするストリームの場合は、 メソッドと SetLengthPositionLength および プロパティを使用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 ストア アプリで使用する場合は、 Stream と AsOutputStreamの 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)WriteAsync(Byte[], Int32, Int32)、および CopyToAsync(Stream) では、同期メソッドRead(Byte[], Int32, Int32)とそのWrite(Byte[], Int32, Int32)実装を使用します。 したがって、 と Write(Byte[], Int32, Int32) のRead(Byte[], Int32, Int32)実装は非同期メソッドで正しく機能します。 の既定のReadByte()実装とWriteByte(Byte)、新しい単一要素バイト配列を作成し、 および Write(Byte[], Int32, Int32)のRead(Byte[], Int32, Int32)実装を呼び出します。 から Stream派生する場合は、パフォーマンスを大幅に向上させるために、内部バッファーがある場合は、これらのメソッドをオーバーライドして内部バッファーにアクセスすることをお勧めします。 、 のCanReadPositionCanWriteSetLength(Int64)CanSeekFlush()LengthSeek(Int64, SeekOrigin)実装も指定する必要があります。
メソッドを Close() オーバーライドしないでください。代わりに、すべてのクリーンアップ ロジックを Stream メソッドに Dispose(Boolean) 配置します。 詳細については、「 Dispose メソッドの実装」を参照してください。
コンストラクター
Stream() |
Stream クラスの新しいインスタンスを初期化します。 |
フィールド
Null |
バッキング ストアを持たない |
プロパティ
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) |
現在のストリームからバイト数を読み取 |
ReadExactly(Span<Byte>) |
現在のストリームからバイトを読み取り、 が入力されるまでストリーム内の位置を |
ReadExactlyAsync(Byte[], Int32, Int32, CancellationToken) |
現在のストリームからバイト数を非同期に読み取 |
ReadExactlyAsync(Memory<Byte>, CancellationToken) |
現在のストリームからバイトを非同期に読み取り、 が満たされるまでストリーム内の位置を |
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) |
非同期の破棄可能から返されるタスク上での待機がどのように実行されるかを構成します。 |