2011-01-19 25 views

Trả lời

874

Cách dễ nhất để chuyển đổi mảng byte thành luồng là sử dụng lớp MemoryStream:

Stream stream = new MemoryStream(byteArray); 
+17

Xin lưu ý rằng cách tạo luồng này có lẽ không lý tưởng: "Nhà xây dựng này không để lộ luồng cơ bản. GetBuffer ném UnauthorizedAccessException. " http://msdn.microsoft.com/en-us/library/e55f3s5k.aspx – noocyte

+13

@noocyte cách lý tưởng là gì? – developerbmw

+4

nhưng bạn vẫn có thể sử dụng 'stream.ToArray()' nếu bạn muốn mảng byte của bạn trở lại. –

260

Bạn đang tìm kiếm MemoryStream.Write method. Ví dụ, đoạn mã sau sẽ viết nội dung của một mảng byte[] vào một dòng bộ nhớ:

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

Ngoài ra, bạn có thể create a new, không thay đổi kích thước MemoryStream đối tượng dựa trên các mảng byte:

byte[] myByteArray = new byte[10]; 
MemoryStream stream = new MemoryStream(myByteArray); 
+19

Đây là câu trả lời hay nhất. Nó ngắn gọn và bao gồm tất cả các ứng dụng thực tế. Có một gotcha chỉ bằng cách sử dụng các mảng byte dựa trên constructor như được chỉ ra ở đây - dòng kết quả là không tái khá lớn. – Jduv

+10

Cũng nhớ đặt lại luồng sau: stream.Seek (0, SeekOrigin.Begin); –

+0

Xin lưu ý rằng tùy chọn đầu tiên 'MemoryStream.Write' tốn nhiều bộ nhớ hơn' MemoryStream mới (myByteArray) ' – Alex

23

Cách tiếp cận chung để ghi vào bất kỳ luồng nào (không chỉ MemoryStream) là sử dụng BinaryWriter:

static void Write(Stream s, Byte[] bytes) 
{ 
    using (var writer = new BinaryWriter(s)) 
    { 
     writer.Write(bytes); 
    } 
} 
Các vấn đề liên quan