2011-07-29 47 views
13

Trong this example from MS, bạn sẽ nhận thấy rằng sau khi chúng ta đọc một byte từ luồng bộ nhớ, nó đi vào một int mà sau đó phải được chuyển đổi sang byte. Nó stikes tôi là lạ rằng một chức năng như .ReadByte() không trả lại một byte ở nơi đầu tiên. Có một lý do tại sao MS đã làm nó theo cách này?MemoryStream: tại sao chuyển đổi sang byte sau khi readByte

// Read the remaining bytes, byte by byte. 
while(count < memStream.Length) 
{ 
    byteArray[count++] = 
     Convert.ToByte(memStream.ReadByte()); 
} 

một ý nghĩ xảy ra với tôi. Có lẽ điều này đi xuống để sử dụng. Có lẽ ReadByte() thường được sử dụng để lấy độ dài ngắn, mà subsequents được tiêu thụ trong lấy qua nhiều chiều dài

int length=ms.ReadByte(); 
ms.Read(buf,0,lenth); 

ví dụ: bạn có thể sử dụng dài mà không có một dàn diễn viên. Đây có phải là lý do đủ tốt không?

+0

Bạn nên kiểm tra 'ToArray()' trong trường hợp bạn muốn mảng byte – V4Vendetta

Trả lời

26

Đây không phải là đặc trưng cho dòng bộ nhớ, chứ không phải đó là vì trong những thiết kế của lớp cơ sở "Stream" và lý do cho điều đó là giá trị

Return:

Các unsigned byte cast tới Int32 hoặc -1 nếu ở cuối luồng.

-1 không thể được biểu diễn bằng unsigned byte

+0

+1 từ tôi ty. – sgtz

+0

và -1 chỉ được trả lại nếu có thời gian chờ dựa trên ReadTimeout? – sgtz

+0

Không, -1 là cho Kết thúc luồng, ví dụ: Bạn đã đạt đến EOF trên luồng tệp – Ankur

0

Tôi tin rằng họ đang chuyển đổi với điều đó từ int để byte một cách reallllllly đẹp, vì ReadByte() trả về một int và byteArray của họ là loại int[].

5

Khi bạn sử dụng ReadByte Nếu đọc là thành công thì vị trí hiện tại trong dòng được đi sớm hơn một byte. nhưng được thiết kế để trả về -1 nếu đã kết thúc luồng.

Bây giờ điều này sẽ không phải là một giá trị hợp lệ cho Byte (unsigned nó)

ms.Read(buf,0,lenth); đây lenth là số byte để đọc từ stream và những gì bạn nhận được từ ReadByte là byte đầu tiên của nó không được sử dụng trong thời trang này, giống như

byte[] buff = new byte[ms.Length]; 
ms.Read(buff , 0, buff .Length); 
+0

+1 từ tôi ty. – sgtz

Các vấn đề liên quan