ストリームの基本概念
ストリームはデータの入出力操作を抽象化した概念で、特に大容量データを扱う際にメモリ効率を向上させるために使用されます。.NET FrameworkではSystem.IO名前空間に各種ストリームクラスが提供されています。
主要なストリームクラス
- FileStream - ファイル操作用
- MemoryStream - メモリ操作用
- NetworkStream - ネットワーク通信用
Streamクラスの基本機能
public abstract class Stream
{
public abstract bool CanRead { get; }
public abstract bool CanSeek { get; }
public abstract bool CanWrite { get; }
public abstract long Length { get; }
public abstract long Position { get; set; }
public abstract void Flush();
public abstract int Read(byte[] buffer, int offset, int count);
public abstract long Seek(long offset, SeekOrigin origin);
public abstract void Write(byte[] buffer, int offset, int count);
}
FileStreamの実践的使用例
using System;
using System.IO;
using System.Text;
class FileStreamExample
{
static void Main()
{
// ファイル書き込み例
using (var fs = new FileStream("sample.txt", FileMode.Create))
{
string content = "サンプルテキスト";
byte[] data = Encoding.UTF8.GetBytes(content);
fs.Write(data, 0, data.Length);
}
// ファイル読み込み例
using (var fs = new FileStream("sample.txt", FileMode.Open))
{
byte[] buffer = new byte[1024];
int bytesRead = fs.Read(buffer, 0, buffer.Length);
string result = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine(result);
}
}
}
FileクラスとFileInfoクラスの比較
| 比較項目 | Fileクラス | FileInfoクラス |
|---|---|---|
| タイプ | 静的クラス | インスタンスクラス |
| 使用シーン | 単発操作 | 複数回操作 |
| パフォーマンス | 毎回セキュリティチェック | 初期化時1回のみ |
Fileクラスの基本操作
// ファイル作成と書き込み
File.WriteAllText("output.txt", "サンプルコンテンツ");
// ファイル読み込み
string content = File.ReadAllText("output.txt");
FileInfoクラスの基本操作
var fileInfo = new FileInfo("data.txt");
using (var writer = fileInfo.CreateText())
{
writer.WriteLine("データを書き込み");
}
ストリームリーダー/ライターの活用
// StreamWriterを使用した書き込み
using (var writer = new StreamWriter("log.txt"))
{
writer.WriteLine("ログメッセージ");
}
// StreamReaderを使用した読み込み
using (var reader = new StreamReader("log.txt"))
{
string line;
while ((line = reader.ReadLine()) != null)
{
Console.WriteLine(line);
}
}