Класс BufferedStream
BufferedStream оборачивает другой
Stream,
например MemoryStream
или FileStream.
Данные уходят вниз после
Flush
или когда буфер заполнен. Своего
ToArray нет. Dispose
закрывает и внутренний поток - читайте
до освобождения. Есть асинхронные
перегрузки записи и чтения.
Синтаксис
using System.IO;
Stream inner = new MemoryStream();
using BufferedStream buffered = new BufferedStream(inner);
Пример
Давайте проверим длину внутреннего
потока до и после Flush:
using System;
using System.IO;
using System.Text;
class Program
{
static void Main()
{
MemoryStream inner = new MemoryStream();
using (BufferedStream buffered = new BufferedStream(inner))
{
byte[] data = Encoding.UTF8.GetBytes("abcde");
buffered.Write(data, 0, data.Length);
bool before = inner.Length == 0;
buffered.Flush();
string res = Encoding.UTF8.GetString(inner.ToArray());
Console.WriteLine(before);
Console.WriteLine(res);
}
}
}
Результат выполнения кода:
True
"abcde"
Пример
Давайте прочитаем данные из внутреннего
потока до Dispose:
using System;
using System.IO;
using System.Text;
class Program
{
static void Main()
{
MemoryStream inner = new MemoryStream();
using (BufferedStream buffered = new BufferedStream(inner))
{
byte[] data = Encoding.UTF8.GetBytes("12345");
buffered.Write(data, 0, data.Length);
buffered.Flush();
string res = Encoding.UTF8.GetString(inner.ToArray());
Console.WriteLine(res);
}
}
}
Результат выполнения кода:
"12345"
Пример
Давайте покажем ObjectDisposedException
после закрытия:
using System;
using System.IO;
class Program
{
static void Main()
{
MemoryStream inner = new MemoryStream();
BufferedStream buffered = new BufferedStream(inner);
buffered.Dispose();
try
{
buffered.Read(new byte[1], 0, 1);
}
catch (ObjectDisposedException)
{
Console.WriteLine("fail");
}
}
}
Результат выполнения кода:
"fail"
Смотрите также
-
Stream,
базовый поток иFlush -
MemoryStream,
нижний поток в примере -
FileStream,
файл под буфером -
Write,
запись в обёртку