스트림 구조

Untitled

스트림 사용

제목 없음

using System;
using System.IO;

class Program
{
  static void Main()
  {
    using (Stream s = new FileStream("test.txt", FileMode.Create))
    {
      Console.WriteLine(s.CanRead);  // true
      Console.WriteLine(s.CanWrite);  // true
      Console.WriteLine(s.CanSeek);  // true

      s.WriteByte(101);
      s.WriteByte(102);
      byte[] block = { 1, 2, 3, 4, 5, };
      s.Write(block, 0, block.Length);  // 5바이트 블록을 기록한다.

      Console.WriteLine(s.Length);  // 7
      Console.WriteLine(s.Position);  // 7
      s.Position = 0;  // 시작 위치로 돌아간다.

      Console.WriteLine(s.ReadByte());  // 101
      Console.WriteLine(s.ReadByte());  // 102

      // 스트림을 읽어서 block 배열을 다시 채운다.
      Console.WriteLine(s.Read(block, 0, block.Length));  // 5

      // 위의 Read 호출이 5를 돌려주어다고 가정하면 현재 위치느느 파일의 끝이므로 다음 Read는 0을 돌려준다.
      Console.WriteLine(s.Read(block, 0, block.Length));  // 0
    }
  }
}
async static void AsyncDemo()
{
  using (Stream s = new FileStream("test.txt", FileMode.Create))
  {
      byte[] block = { 1, 2, 3, 4, 5, };
      await s.WriteAsync(block, 0, block.Length);  // 비동기 쓰기

      s.Position = 0;  // 시작 위치로 돌아간다.2

      // 스트림을 읽어서 block 배열을 다시 채운다.
      Console.WriteLine(await s.ReadAsync(block, 0, block.Length));  // 5
  }
}

스트림 읽기와 쓰기