ストリームの作成Compose streams

バッキング ストア は、ディスクやメモリなどの記憶域メディアです。A backing store is a storage medium, such as a disk or memory. さまざまなバッキング ストアが Stream クラスの実装としてそれぞれ独自のストリームを実装しています。Each different backing store implements its own stream as an implementation of the Stream class.

各ストリームの種類は、指定されたバッキング ストアとの間でバイトの読み取りと書き込みを行います。Each stream type reads and writes bytes from and to its given backing store. バッキング ストアに接続するストリームは、基本ストリーム と呼ばれます。Streams that connect to backing stores are called base streams. 基本ストリームにはコンストラクターがあり、ストリームをバッキング ストアに接続するために必要なパラメーターがそれに指定されます。Base streams have constructors with the parameters necessary to connect the stream to the backing store. たとえば、FileStream には、プロセスでファイルを共有する方法を指定する path パラメーターを指定するコンストラクターがあります。For example, FileStream has constructors that specify a path parameter, which specifies how the file will be shared by processes.

System.IO クラスは、簡易なストリーム構成で設計されています。The design of the System.IO classes provides simplified stream composition. 必要な機能を提供する 1 つ以上のパススルー ストリームに基本ストリームをアタッチできます。You can attach base streams to one or more pass-through streams that provide the functionality you want. 好みの種類の読み取りまたは書き込みを簡単に実行できるように、チェーンの末端に閲覧者またはライターをアタッチできます。You can attach a reader or writer to the end of the chain, so the preferred types can be read or written easily.

次のコード例では、MyFile.txt をバッファーするために既存の MyFile.txt を中心にして FileStream を作成します。The following code examples create a FileStream around the existing MyFile.txt in order to buffer MyFile.txt. FileStreams は既定でバッファーされます。Note that FileStreams are buffered by default.

重要

サンプルでは、MyFile.txt という名前のファイルがアプリと同じフォルダーに入っていると想定しています。The examples assume that a file named MyFile.txt already exists in the same folder as the app.

例:StreamReader を使用するExample: Use StreamReader

次の例では、FileStream から文字を読み取る StreamReader が作成されます。これはコンストラクター引数として StreamReader に渡されます。The following example creates a StreamReader to read characters from the FileStream, which is passed to the StreamReader as its constructor argument. StreamReader.ReadLine は、StreamReader.Peek によって文字が検出されなくなるまで読み取りを行います。StreamReader.ReadLine then reads until StreamReader.Peek finds no more characters.

using System;
using System.IO;

public class CompBuf
{
    private const string FILE_NAME = "MyFile.txt";

    public static void Main()
    {
        if (!File.Exists(FILE_NAME))
        {
            Console.WriteLine($"{FILE_NAME} does not exist!");
            return;
        }
        FileStream fsIn = new FileStream(FILE_NAME, FileMode.Open,
            FileAccess.Read, FileShare.Read);
        // Create an instance of StreamReader that can read
        // characters from the FileStream.
        using (StreamReader sr = new StreamReader(fsIn))
        {
            string input;
            // While not at the end of the file, read lines from the file.
            while (sr.Peek() > -1)
            {
                input = sr.ReadLine();
                Console.WriteLine(input);
            }
        }
    }
}
Imports System.IO

Public Class CompBuf
    Private Const FILE_NAME As String = "MyFile.txt"

    Public Shared Sub Main()
        If Not File.Exists(FILE_NAME) Then
            Console.WriteLine($"{FILE_NAME} does not exist!")
            Return
        End If
        Dim fsIn As new FileStream(FILE_NAME, FileMode.Open, _
            FileAccess.Read, FileShare.Read)
        ' Create an instance of StreamReader that can read
        ' characters from the FileStream.
        Using sr As New StreamReader(fsIn)
            Dim input As String
            ' While not at the end of the file, read lines from the file.
            While sr.Peek() > -1
                input = sr.ReadLine()
                Console.WriteLine(input)
            End While
        End Using
    End Sub
End Class

例:BinaryReader を使用するExample: Use BinaryReader

次の例では、FileStream からバイト数を読み取る BinaryReader が作成されます。これはコンストラクター引数として BinaryReader に渡されます。The following example creates a BinaryReader to read bytes from the FileStream, which is passed to the BinaryReader as its constructor argument. ReadByte は、PeekChar によってバイトが検出されなくなるまで読み取りを行います。ReadByte then reads until PeekChar finds no more bytes.

using System;
using System.IO;

public class ReadBuf
{
    private const string FILE_NAME = "MyFile.txt";

    public static void Main()
    {
        if (!File.Exists(FILE_NAME))
        {
            Console.WriteLine($"{FILE_NAME} does not exist.");
            return;
        }
        FileStream f = new FileStream(FILE_NAME, FileMode.Open,
            FileAccess.Read, FileShare.Read);
        // Create an instance of BinaryReader that can
        // read bytes from the FileStream.
        using (BinaryReader br = new BinaryReader(f))
        {
            byte input;
            // While not at the end of the file, read lines from the file.
            while (br.PeekChar() > -1 )
            {
                input = br.ReadByte();
                Console.WriteLine(input);
            }
        }
    }
}
Imports System.IO

Public Class ReadBuf
    Private Const FILE_NAME As String = "MyFile.txt"

    Public Shared Sub Main()
        If Not File.Exists(FILE_NAME) Then
            Console.WriteLine($"{FILE_NAME} does not exist.")
            Return
        End If
        Dim f As New FileStream(FILE_NAME, FileMode.Open, _
            FileAccess.Read, FileShare.Read)
        ' Create an instance of BinaryReader that can
        ' read bytes from the FileStream.
        Using br As new BinaryReader(f)
            Dim input As Byte
            ' While not at the end of the file, read lines from the file.
            While br.PeekChar() > -1
                input = br.ReadByte()
                Console.WriteLine(input)
            End While
        End Using
    End Sub
End Class

関連項目See also