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の一部は、次のとおりですFileStreamMemoryStream。
基になるデータ ソースまたはリポジトリによっては、これらの機能の一部のみがストリームでサポートされる場合があります。 クラスの 、CanWrite、およびCanSeekプロパティを使用してCanRead、ストリームの機能をStream照会できます。
メソッドとWriteメソッドはRead、さまざまな形式でデータの読み取りと書き込みを行います。 シークをサポートするストリームの場合は、and メソッドとプロパティをPositionLength使用SeekSetLengthして、ストリームの現在の位置と長さを照会および変更します。
この型は 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 アプリまたはデスクトップ アプリで特に重要です。 非同期メソッドは、Visual Basic および C# の and async キーワードと await 組み合わせて使用されます。
Windows 8.x ストア アプリで使用する場合は、Stream次の 2 つの拡張メソッドが AsInputStream AsOutputStream含まれます。 これらのメソッドは、オブジェクトをStreamWindows ランタイム内のストリームに変換します。 また、Windows ランタイム内のストリームを、メソッドAsStreamForWriteをStream使用してオブジェクトにAsStreamForRead変換することもできます。 詳細については、「方法: .NET Framework ストリームとWindows ランタイム ストリームの間で変換する」を参照してください。
一部のストリーム実装では、パフォーマンスを向上させるために、基になるデータのローカル バッファリングが実行されます。 このようなストリームの場合は、or メソッドをFlushFlushAsync使用して内部バッファーをクリアし、すべてのデータが基になるデータ ソースまたはリポジトリに確実に書き込まれたことを確認できます。
バッキング ストアのないストリーム (ビット バケットとも呼ばれます) が必要な場合は、このフィールドを 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) 実装を使用します。 したがって、実装はRead(Byte[], Int32, Int32)Write(Byte[], Int32, Int32)非同期メソッドで正しく動作します。 新しい単一要素バイト配列の既定の ReadByte() 実装と WriteByte(Byte) 作成、および Read(Byte[], Int32, Int32) Write(Byte[], Int32, Int32). 派生 Stream元の場合は、パフォーマンスを大幅に向上させるために、内部バッファーがある場合は、これらのメソッドをオーバーライドして内部バッファーにアクセスすることをお勧めします。 また、およびの実装CanReadPositionCanWriteSetLength(Int64)CanSeekFlush()LengthSeek(Int64, SeekOrigin)を提供する必要があります。
代わりに、すべてのクリーンアップ ロジックをClose()メソッドに配置して、メソッドをStreamDispose(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) |
非同期の破棄可能から返されるタスク上での待機がどのように実行されるかを構成します。 |