Лучший способ преобразовать Поток (неизвестной длины) к массиву байтов, в.NET?

У меня есть следующий код для чтения данных с Потока (в этом случае с именованного канала) и в массив байтов:

// 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.Спасибо!

15
задан Frank Hamming 18 June 2010 в 12:20
поделиться

2 ответа

Похоже, ваше текущее решение довольно хорошее. Вы можете подумать о том, чтобы превратить его в метод расширения, если хотите, чтобы код выглядел чище.

1
ответ дан 1 December 2019 в 02:54
поделиться

Бесстыдно скопировано из статьи 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);
       }
   }
}
21
ответ дан 1 December 2019 в 02:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: