ストリームの構成
バッキング ストアとは、ディスクやメモリのようなストレージ メディアのことです。 各種のバッキング ストアのそれぞれが、Stream クラスの実装として独自のストリームを実装しています。 各ストリーム型は、関連付けられたバッキング ストアからバイトを読み取ったり書き込んだりします。 バッキング ストアに関連付けられたストリームは、基本ストリームと呼ばれます。 基本ストリームには、ストリームをバッキング ストアに関連付けるために必要なパラメーターを持つコンストラクターがあります。 たとえば、FileStream には、プロセス間でファイルを共有する方法を指定するパス パラメーターなどを指定するコンストラクターがあります。
System.IO クラスは、ストリームを簡単に構成できるようにデザインされています。 基本ストリームは、必要な機能を提供する 1 つ以上のパススルー ストリームに結合できます。 必要な型を簡単に読み取ったり書き込んだりできるように、チェインの末尾にリーダーまたはライターを結合できます。
既存の MyFile.txt をバッファリングするために、MyFile.txt に対して FileStream を作成するコードの例を次に示します。 FileStreams は、既定でバッファリングされます。 次に、FileStream から文字を読み取るために StreamReader を作成します。FileStream は、コンストラクター引数として StreamReader に渡されます ReadLine は、Peek が文字を検出できなくなるまで文字を読み取ります。
Imports System
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("{0} does not exist!", FILE_NAME)
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
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("{0} does not exist!", FILE_NAME);
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);
}
}
}
}
using namespace System;
using namespace System::IO;
public ref class CompBuf
{
private:
static String^ FILE_NAME = "MyFile.txt";
public:
static void Main()
{
if (!File::Exists(FILE_NAME))
{
Console::WriteLine("{0} does not exist!", FILE_NAME);
return;
}
FileStream^ fsIn = gcnew FileStream(FILE_NAME, FileMode::Open,
FileAccess::Read, FileShare::Read);
// Create an instance of StreamReader that can read
// characters from the FileStream.
StreamReader^ sr = gcnew 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);
}
sr->Close();
}
};
int main()
{
CompBuf::Main();
}
既存の MyFile.txt をバッファリングするために、MyFile.txt に対して FileStream を作成するコードの例を次に示します。 FileStreams は、既定でバッファリングされます。 次に、FileStream からバイトを読み取るための BinaryReader を作成します。FileStream は、コンストラクター引数として StreamReader に渡されます ReadByte は、PeekChar がバイトを検出できなくなるまでバイトを読み取ります。
Imports System
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("{0} does not exist.", FILE_NAME)
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
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("{0} does not exist.", FILE_NAME);
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);
}
}
}
}
using namespace System;
using namespace System::IO;
public ref class ReadBuf
{
private:
static String^ FILE_NAME = "MyFile.txt";
public:
static void Main()
{
if (!File::Exists(FILE_NAME))
{
Console::WriteLine("{0} does not exist.", FILE_NAME);
return;
}
FileStream^ f = gcnew FileStream(FILE_NAME, FileMode::Open,
FileAccess::Read, FileShare::Read);
// Create an instance of BinaryReader that can
// read bytes from the FileStream.
BinaryReader^ br = gcnew 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);
}
br->Close();
}
};
int main()
{
ReadBuf::Main();
}