У меня есть следующий код для чтения данных с Потока (в этом случае с именованного канала) и в массив байтов:
// NPSS is an instance of NamedPipeServerStream
int BytesRead;
byte[] StreamBuffer = new byte[BUFFER_SIZE]; // size defined elsewhere (less than total possible message size, though)
MemoryStream MessageStream = new MemoryStream();
do
{
BytesRead = NPSS.Read(StreamBuffer, 0, StreamBuffer.Length);
MessageStream.Write(StreamBuffer, 0, BytesRead);
} while (!NPSS.IsMessageComplete);
byte[] Message = MessageStream.ToArray(); // final data
Вы могли смотреть и сообщить мне, может ли это быть сделано более эффективно или аккуратно? Кажется немного грязным, как это, с помощью MemoryStream.Спасибо!
Похоже, ваше текущее решение довольно хорошее. Вы можете подумать о том, чтобы превратить его в метод расширения, если хотите, чтобы код выглядел чище.
Бесстыдно скопировано из статьи Jon Skeet'а.
public static byte[] ReadFully (Stream stream)
{
byte[] buffer = new byte[32768];
using (MemoryStream ms = new MemoryStream())
{
while (true)
{
int read = stream.Read (buffer, 0, buffer.Length);
if (read <= 0)
return ms.ToArray();
ms.Write (buffer, 0, read);
}
}
}