C# Декорирование класса Stream
Задача заключается в следующем: необходимо задекорировать класс Stream таким образом, чтобы он дублировал все прочитанные байты список. Например, при чтении файла, каждый байт записывался в созданный список. Вот код, который я написал:
public class DoubleToList : Stream
{
private readonly Stream _stream;
private List<byte> _bytes;
public Double(Stream stream, List<byte> bytes)
{
_stream = stream;
_bytes = bytes;
}
public override int Read(byte[] buffer, int offset, int count)
{
for(int i = 0; i < buffer.Length; i++)
{
_bytes.Add(buffer[i]);
}
return buffer.Length;
}
}
Однако, когда просматриваю список байтов, то в нём записаны одни только нули. Непонятно как конкретно записывать считываемые данные в лист.
Ответы (2 шт):
Автор решения: Alexandr Tsvetkov
→ Ссылка
public override int Read(byte[] buffer, int offset, int count)
{
_stream.Read(buffer, offset, count);
for (int i = 0; i < buffer.Length; i++)
{
_bytes.Add(buffer[i]);
}
return buffer.Length;
}
Автор решения: iiKuzmychov
→ Ссылка
Во-первых, вам нужно исправить название конструктора.
А во-вторых, раз у вас декоратор, то нужно вызывать метод декорируемого класса (и не забывать про offset и count):
public override int Read(byte[] buffer, int offset, int count)
{
var readedBytesCount = _stream.Read(buffer, offset, count);
_bytes.AddRagne(buffer.Skip(offset).Take(readedBytesCount));
return readedBytesCount;
}
Ну, и в-третьих, вы уже задавили этот вопрос ранее. Нужно было отредактировать его, а не создавать новый.