Как мне преобразовать struct System.Byte byte [] в объект System.IO.Stream в C #?

508

Как преобразовать массив byte[] в поток в С#?

  • 4
    Что за стрим? Зачем?
Теги:
stream
bytearray

4 ответа

827
Лучший ответ

Самый простой способ преобразования байтового массива в поток - это MemoryStream класс:

Stream stream = new MemoryStream(byteArray);
  • 18
    Обратите внимание, что этот способ создания потока, возможно, не идеален: «Этот конструктор не предоставляет базовый поток. GetBuffer создает исключение UnauthorizedAccessException». msdn.microsoft.com/en-us/library/e55f3s5k.aspx
  • 16
    @noocyte какой тогда идеальный путь?
Показать ещё 2 комментария
237

Вы ищете метод MemoryStream.Write. Например, следующий код будет писать содержимое массива byte[] в поток памяти:

byte[] myByteArray = new byte[10];
MemoryStream stream = new MemoryStream();
stream.Write(myByteArray, 0, myByteArray.Length);

В качестве альтернативы вы можете создать новый, не изменяемый размер MemoryStream объект на основе массива байтов:

byte[] myByteArray = new byte[10];
MemoryStream stream = new MemoryStream(myByteArray);
  • 21
    Это лучший ответ. Это краткое и охватывает все практические применения. Здесь есть проблема с использованием конструктора на основе байтового массива, как указано здесь, - результирующий поток не может быть изменен.
  • 13
    Также не забудьте сбросить поток позже: stream.Seek (0, SeekOrigin.Begin);
Показать ещё 3 комментария
21

Общий подход к записи в любой поток (не только MemoryStream) заключается в использовании BinaryWriter:

static void Write(Stream s, Byte[] bytes)
{
    using (var writer = new BinaryWriter(s))
    {
        writer.Write(bytes);
    }
}
4

Просмотрите класс MemoryStream.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню