MemoryStream クラス
アセンブリ: mscorlib (mscorlib.dll 内)


ファイルの作成およびテキストのファイルへの書き込みの例については、「方法 : ファイルにテキストを書き込む」を参照してください。ファイルからのテキストの読み取りの例については、「方法 : ファイルからテキストを読み取る」を参照してください。バイナリ ファイルの読み取りおよび書き込みの例については、「方法 : 新しく作成されたデータ ファイルに対して読み書きする」を参照してください。
MemoryStream クラスは、バッキング ストアとしてディスクやネットワーク接続ではなく、メモリを使用するストリームを作成します。MemoryStream は、MemoryStream オブジェクトの作成時に初期化される符号なしバイト配列として格納されるデータをカプセル化します。配列は空の配列としても作成できます。カプセル化されたデータは、メモリで直接アクセスできます。メモリ ストリームを使用すると、アプリケーションでの一時バッファと一時ファイルの必要性を減らすことができます。
ストリームの current position は、次の読み取りまたは書き込み操作が実行される位置です。現在の位置は、Seek メソッドで取得または設定できます。MemoryStream の新しいインスタンスを作成するときに、現在の位置はゼロに設定されます。
符号なしバイト配列で作成したメモリ ストリームには、サイズを変更できないデータのストリーム ビュー機能が用意されています。これは書き込み専用です。バイト配列を使用する場合、ストリームに追加したり、ストリームを縮小したりできません。ただし、コンストラクタに渡すパラメータによっては、既存の内容を変更できることがあります。空のメモリ ストリームは、サイズの変更、書き込み、および読み取りを行うことができます。
MemoryStream オブジェクトを ResX ファイルまたは .resources ファイルに追加した場合、実行時に GetStream メソッドを呼び出してこのオブジェクトを取得します。
MemoryStream オブジェクトがリソース ファイルにシリアル化される場合、このオブジェクトは実際には UnmanagedMemoryStream としてシリアル化されます。これにより、パフォーマンスが向上するだけでなく、Stream メソッドを使用せずにデータへのポインタを直接取得できます。
Windows Mobile for Pocket PC、Windows Mobile for Smartphone、Windows CE プラットフォームメモ : Windows CE では、クリップボードから貼り付けられたメモリ ストリームは、クリップボードにコピーされたメモリ ストリームよりもわずかに大きなサイズを保持できます。元のメモリ ストリームの最後に追加のバイトを付加できるからです。メモリ ストリームを厳密に受け取るには、オブジェクトがメモリ ストリームを受け取る方法を判断するためのサイズをプレフィックスとしてオブジェクトに追加するか、メモリ ストリームとそのサイズの文字列値を含む DataObject をクリップボードにコピーします。

メモリをバッキング ストアとして使用してデータを読み書きする方法の例を次に示します。
Imports System Imports System.IO Imports System.Text Module MemStream Sub Main() Dim count As Integer Dim byteArray As Byte() Dim charArray As Char() Dim uniEncoding As New UnicodeEncoding() ' Create the data to write to the stream. Dim firstString As Byte() = _ uniEncoding.GetBytes("Invalid file path characters are: ") Dim secondString As Byte() = _ uniEncoding.GetBytes(Path.InvalidPathChars) Dim memStream As New MemoryStream(100) Try ' Write the first string to the stream. memStream.Write(firstString, 0 , firstString.Length) ' Write the second string to the stream, byte by byte. count = 0 While(count < secondString.Length) memStream.WriteByte(secondString(count)) count += 1 End While ' Write the stream properties to the console. Console.WriteLine( _ "Capacity = {0}, Length = {1}, Position = {2}", _ memStream.Capacity.ToString(), _ memStream.Length.ToString(), _ memStream.Position.ToString()) ' Set the stream position to the beginning of the stream. memStream.Seek(0, SeekOrigin.Begin) ' Read the first 20 bytes from the stream. byteArray = _ New Byte(CType(memStream.Length, Integer)){} count = memStream.Read(byteArray, 0, 20) ' Read the remaining Bytes, Byte by Byte. While(count < memStream.Length) byteArray(count) = _ Convert.ToByte(memStream.ReadByte()) count += 1 End While ' Decode the Byte array into a Char array ' and write it to the console. charArray = _ New Char(uniEncoding.GetCharCount( _ byteArray, 0, count)){} uniEncoding.GetDecoder().GetChars( _ byteArray, 0, count, charArray, 0) Console.WriteLine(charArray) Finally memStream.Close() End Try End Sub End Module
using System; using System.IO; using System.Text; class MemStream { static void Main() { int count; byte[] byteArray; char[] charArray; UnicodeEncoding uniEncoding = new UnicodeEncoding(); // Create the data to write to the stream. byte[] firstString = uniEncoding.GetBytes( "Invalid file path characters are: "); byte[] secondString = uniEncoding.GetBytes( Path.InvalidPathChars); using(MemoryStream memStream = new MemoryStream(100)) { // Write the first string to the stream. memStream.Write(firstString, 0 , firstString.Length); // Write the second string to the stream, byte by byte. count = 0; while(count < secondString.Length) { memStream.WriteByte(secondString[count++]); } // Write the stream properties to the console. Console.WriteLine( "Capacity = {0}, Length = {1}, Position = {2}\n", memStream.Capacity.ToString(), memStream.Length.ToString(), memStream.Position.ToString()); // Set the position to the beginning of the stream. memStream.Seek(0, SeekOrigin.Begin); // Read the first 20 bytes from the stream. byteArray = new byte[memStream.Length]; count = memStream.Read(byteArray, 0, 20); // Read the remaining bytes, byte by byte. while(count < memStream.Length) { byteArray[count++] = Convert.ToByte(memStream.ReadByte()); } // Decode the byte array into a char array // and write it to the console. charArray = new char[uniEncoding.GetCharCount( byteArray, 0, count)]; uniEncoding.GetDecoder().GetChars( byteArray, 0, count, charArray, 0); Console.WriteLine(charArray); } } }
using namespace System; using namespace System::IO; using namespace System::Text; int main() { int count; array<Byte>^byteArray; array<Char>^charArray; UnicodeEncoding^ uniEncoding = gcnew UnicodeEncoding; // Create the data to write to the stream. array<Byte>^firstString = uniEncoding->GetBytes( "Invalid file path characters are: " ); array<Byte>^secondString = uniEncoding->GetBytes( Path::InvalidPathChars ); MemoryStream^ memStream = gcnew MemoryStream( 100 ); try { // Write the first string to the stream. memStream->Write( firstString, 0, firstString->Length ); // Write the second string to the stream, byte by byte. count = 0; while ( count < secondString->Length ) { memStream->WriteByte( secondString[ count++ ] ); } // Write the stream properties to the console. Console::WriteLine( "Capacity = {0}, Length = {1}, " "Position = {2}\n", memStream->Capacity.ToString(), memStream->Length.ToString(), memStream->Position.ToString() ); // Set the stream position to the beginning of the stream. memStream->Seek( 0, SeekOrigin::Begin ); // Read the first 20 bytes from the stream. byteArray = gcnew array<Byte>(memStream->Length); count = memStream->Read( byteArray, 0, 20 ); // Read the remaining bytes, byte by byte. while ( count < memStream->Length ) { byteArray[ count++ ] = Convert::ToByte( memStream->ReadByte() ); } // Decode the Byte array into a Char array // and write it to the console. charArray = gcnew array<Char>(uniEncoding->GetCharCount( byteArray, 0, count )); uniEncoding->GetDecoder()->GetChars( byteArray, 0, count, charArray, 0 ); Console::WriteLine( charArray ); } finally { memStream->Close(); } }
import System.*; import System.IO.*; import System.Text.*; class MemStream { public static void main(String[] args) { int count; ubyte byteArray[]; char charArray[]; UnicodeEncoding uniEncoding = new UnicodeEncoding(); // Create the data to write to the stream. ubyte firstString[] = uniEncoding.GetBytes( "Invalid file path characters are: "); ubyte secondString[] = uniEncoding.GetBytes(Path.InvalidPathChars); MemoryStream memStream = new MemoryStream(100); try { // Write the first string to the stream. memStream.Write(firstString, 0, firstString.length); // Write the second string to the stream, byte by byte. count = 0; while((count < secondString.length)) { memStream.WriteByte(secondString[count++]); } // Write the stream properties to the console. Console.WriteLine( "Capacity = {0}, Length = {1}, Position = {2}\n", (new Integer( memStream.get_Capacity())).ToString() , (new Long ( memStream.get_Length())).ToString() , (new Long ( memStream.get_Position())).ToString()); // Set the position to the beginning of the stream. memStream.Seek(0, SeekOrigin.Begin); // Read the first 20 bytes from the stream. byteArray = new ubyte[(int)memStream.get_Length()]; count = memStream.Read(byteArray, 0, 20); // Read the remaining bytes, byte by byte. while ((count < memStream.get_Length())) { byteArray[count++]= Convert.ToByte(memStream.ReadByte()); } // Decode the byte array into a char array // and write it to the console. charArray = new char[uniEncoding.GetCharCount(byteArray , 0, count)]; uniEncoding.GetDecoder().GetChars(byteArray, 0, count, charArray, 0); Console.WriteLine(charArray); } finally { memStream.Dispose(); } }//main } //MemStream



Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


MemoryStream コンストラクタ ()
アセンブリ: mscorlib (mscorlib.dll 内)


ファイルの作成およびテキストのファイルへの書き込みの例については、「方法 : ファイルにテキストを書き込む」を参照してください。ファイルからのテキストの読み取りの例については、「方法 : ファイルからテキストを読み取る」を参照してください。バイナリ ファイルの読み取りおよび書き込みの例については、「方法 : 新しく作成されたデータ ファイルに対して読み書きする」を参照してください。
CanRead、CanSeek、CanWrite の各プロパティは、すべて true に設定されます。
現在のストリームの容量は、SetLength メソッドを使用して、現在のストリームの容量を超える値にストリーム長を設定した場合に、自動的に増加します。

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


MemoryStream コンストラクタ (Byte[], Boolean)
アセンブリ: mscorlib (mscorlib.dll 内)



ファイルの作成およびテキストのファイルへの書き込みの例については、「方法 : ファイルにテキストを書き込む」を参照してください。ファイルからのテキストの読み取りの例については、「方法 : ファイルからテキストを読み取る」を参照してください。バイナリ ファイルの読み取りおよび書き込みの例については、「方法 : 新しく作成されたデータ ファイルに対して読み書きする」を参照してください。
CanRead プロパティと CanSeek プロパティはどちらも true に設定されます。Capacity は、指定したバイト配列の長さに設定されます。
ストリーム長は、指定したバイト配列の初期長を超える値に設定することはできません。ただし、ストリームを切り詰めることはできます。SetLength のトピックを参照してください。
このコンストラクタは、基になるストリームを公開しません。GetBuffer は UnauthorizedAccessException をスローします。

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


MemoryStream コンストラクタ (Byte[], Int32, Int32)
アセンブリ: mscorlib (mscorlib.dll 内)

Dim buffer As Byte() Dim index As Integer Dim count As Integer Dim instance As New MemoryStream(buffer, index, count)


ファイルの作成およびテキストのファイルへの書き込みの例については、「方法 : ファイルにテキストを書き込む」を参照してください。ファイルからのテキストの読み取りの例については、「方法 : ファイルからテキストを読み取る」を参照してください。バイナリ ファイルの読み取りおよび書き込みの例については、「方法 : 新しく作成されたデータ ファイルに対して読み書きする」を参照してください。
CanRead、CanSeek、CanWrite の各プロパティはすべて、true に設定されますが、容量は変更できません。Capacity は count に設定されます。
ストリーム長は、指定したバイト配列の初期長を超える値に設定することはできません。ただし、ストリームを切り詰めることはできます。SetLength のトピックを参照してください。
このコンストラクタは、基になるストリームを公開しません。GetBuffer は UnauthorizedAccessException をスローします。ただし、ストリームに書き込むことはできます。

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


MemoryStream コンストラクタ (Byte[], Int32, Int32, Boolean, Boolean)
アセンブリ: mscorlib (mscorlib.dll 内)

Public Sub New ( _ buffer As Byte(), _ index As Integer, _ count As Integer, _ writable As Boolean, _ publiclyVisible As Boolean _ )
Dim buffer As Byte() Dim index As Integer Dim count As Integer Dim writable As Boolean Dim publiclyVisible As Boolean Dim instance As New MemoryStream(buffer, index, count, writable, publiclyVisible)
public: MemoryStream ( array<unsigned char>^ buffer, int index, int count, bool writable, bool publiclyVisible )
public MemoryStream ( byte[] buffer, int index, int count, boolean writable, boolean publiclyVisible )
public function MemoryStream ( buffer : byte[], index : int, count : int, writable : boolean, publiclyVisible : boolean )


ファイルの作成およびテキストのファイルへの書き込みの例については、「方法 : ファイルにテキストを書き込む」を参照してください。ファイルからのテキストの読み取りの例については、「方法 : ファイルからテキストを読み取る」を参照してください。バイナリ ファイルの読み取りおよび書き込みの例については、「方法 : 新しく作成されたデータ ファイルに対して読み書きする」を参照してください。
CanRead プロパティと CanSeek プロパティはどちらも true に設定されます。Capacity は count に設定されます。
新しいストリーム インスタンスには書き込むことができますが、基になるバイト配列の Capacity は変更できません。ストリーム長は、指定したバイト配列の初期長を超える値に設定することはできません。ただし、ストリームを切り詰めることはできます。SetLength のトピックを参照してください。

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


MemoryStream コンストラクタ (Int32)
アセンブリ: mscorlib (mscorlib.dll 内)



ファイルの作成およびテキストのファイルへの書き込みの例については、「方法 : ファイルにテキストを書き込む」を参照してください。ファイルからのテキストの読み取りの例については、「方法 : ファイルからテキストを読み取る」を参照してください。バイナリ ファイルの読み取りおよび書き込みの例については、「方法 : 新しく作成されたデータ ファイルに対して読み書きする」を参照してください。
CanRead、CanSeek、CanWrite の各プロパティは、すべて true に設定されます。
容量は、SetLength メソッドを使用して、現在のストリームの容量を超える値にストリーム長を設定した場合に、自動的に増加します。byte[] パラメータで構築された MemoryStream 以外では、MemoryStream の末尾で書き込み操作を実行すると、MemoryStream が拡張されます。


Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


MemoryStream コンストラクタ (Byte[])
アセンブリ: mscorlib (mscorlib.dll 内)



ファイルの作成およびテキストのファイルへの書き込みの例については、「方法 : ファイルにテキストを書き込む」を参照してください。ファイルからのテキストの読み取りの例については、「方法 : ファイルからテキストを読み取る」を参照してください。バイナリ ファイルの読み取りおよび書き込みの例については、「方法 : 新しく作成されたデータ ファイルに対して読み書きする」を参照してください。
CanRead、CanSeek、CanWrite の各プロパティはすべて true に設定されます。Capacity は、指定したバイト配列の長さに設定されます。新しいストリームには書き込むことができますが、サイズは変更できません。
ストリーム長は、指定したバイト配列の初期長を超える値に設定することはできません。ただし、ストリームを切り詰めることはできます。SetLength のトピックを参照してください。
このコンストラクタは、基になるストリームを公開しません。GetBuffer は UnauthorizedAccessException をスローします。

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


MemoryStream コンストラクタ (Byte[], Int32, Int32, Boolean)
アセンブリ: mscorlib (mscorlib.dll 内)

Public Sub New ( _ buffer As Byte(), _ index As Integer, _ count As Integer, _ writable As Boolean _ )
Dim buffer As Byte() Dim index As Integer Dim count As Integer Dim writable As Boolean Dim instance As New MemoryStream(buffer, index, count, writable)


ファイルの作成およびテキストのファイルへの書き込みの例については、「方法 : ファイルにテキストを書き込む」を参照してください。ファイルからのテキストの読み取りの例については、「方法 : ファイルからテキストを読み取る」を参照してください。バイナリ ファイルの読み取りおよび書き込みの例については、「方法 : 新しく作成されたデータ ファイルに対して読み書きする」を参照してください。
CanRead プロパティと CanSeek プロパティはどちらも true に設定されます。Capacity は count に設定されます。
ストリーム長は、指定したバイト配列の初期長を超える値に設定することはできません。ただし、ストリームを切り詰めることはできます。SetLength のトピックを参照してください。
このコンストラクタは、基になるストリームを公開しません。GetBuffer は UnauthorizedAccessException をスローします。ただし、writable が true の場合は、ストリームに書き込むことができます。

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


MemoryStream コンストラクタ


MemoryStream プロパティ

名前 | 説明 | |
---|---|---|
![]() | CanRead | オーバーライドされます。 現在のストリームが読み取りをサポートしているかどうかを示す値を取得します。 |
![]() | CanSeek | オーバーライドされます。 現在のストリームがシークをサポートしているかどうかを示す値を取得します。 |
![]() | CanTimeout | 現在のストリームがタイムアウトできるかどうかを決定する値を取得します。 ( Stream から継承されます。) |
![]() | CanWrite | オーバーライドされます。 現在のストリームが書き込みをサポートしているかどうかを示す値を取得します。 |
![]() | Length | オーバーライドされます。 バイト単位のストリーム長を取得します。 |
![]() | Position | オーバーライドされます。 ストリームの現在位置を取得または設定します。 |
![]() | ReadTimeout | ストリームがタイムアウト前に読み取りを試行する期間を決定する値を取得または設定します。 ( Stream から継承されます。) |
![]() | WriteTimeout | ストリームがタイムアウト前に書き込みを試行する期間を決定する値を取得または設定します。 ( Stream から継承されます。) |

MemoryStream メソッド


名前 | 説明 | |
---|---|---|
![]() | CreateWaitHandle | WaitHandle オブジェクトを割り当てます。 ( Stream から継承されます。) |
![]() | Dispose | オーバーロードされます。 オーバーライドされます。 |
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 ( Object から継承されます。) |
![]() | MemberwiseClone | オーバーロードされます。 ( MarshalByRefObject から継承されます。) |

MemoryStream メンバ
バッキング ストアとしてメモリを使用するストリームを作成します。
MemoryStream データ型で公開されるメンバを以下の表に示します。


名前 | 説明 | |
---|---|---|
![]() | CanRead | オーバーライドされます。 現在のストリームが読み取りをサポートしているかどうかを示す値を取得します。 |
![]() | CanSeek | オーバーライドされます。 現在のストリームがシークをサポートしているかどうかを示す値を取得します。 |
![]() | CanTimeout | 現在のストリームがタイムアウトできるかどうかを決定する値を取得します。(Stream から継承されます。) |
![]() | CanWrite | オーバーライドされます。 現在のストリームが書き込みをサポートしているかどうかを示す値を取得します。 |
![]() | Length | オーバーライドされます。 バイト単位のストリーム長を取得します。 |
![]() | Position | オーバーライドされます。 ストリームの現在位置を取得または設定します。 |
![]() | ReadTimeout | ストリームがタイムアウト前に読み取りを試行する期間を決定する値を取得または設定します。 (Stream から継承されます。) |
![]() | WriteTimeout | ストリームがタイムアウト前に書き込みを試行する期間を決定する値を取得または設定します。 (Stream から継承されます。) |


名前 | 説明 | |
---|---|---|
![]() | CreateWaitHandle | WaitHandle オブジェクトを割り当てます。 (Stream から継承されます。) |
![]() | Dispose | オーバーロードされます。 オーバーライドされます。 |
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。) |
![]() | MemberwiseClone | オーバーロードされます。 ( MarshalByRefObject から継承されます。) |

- MemoryStreamのページへのリンク