2011-07-29 99 views
13

this example from MS中,您會注意到,在從存儲器流中讀取一個字節後,它將進入一個int狀態,然後必須將其轉換爲字節。它讓我感到奇怪,像.ReadByte()這樣的函數並沒有首先返回一個字節。 MS有沒有這樣做的原因?MemoryStream:爲什麼在讀取字節後轉換爲字節

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

思想發生在我。也許這歸結爲使用。也許ReadByte()是經常被用來獲取短的長度,這subsequents在通過各種長度檢索

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

被消耗,即可以使用長度不進行強制轉換。這是一個很好的理由嗎?

+0

如果你想要一個字節數組 – V4Vendetta

回答

26

這不是具體到內存流,而這是因爲基類的「流」的設計,其中的原因是

返回值:

的無符號字節投到一個Int32,或者如果在流結束時爲-1。

-1不能當您使用ReadByte如果讀取成功,則流中的當前位置由一個字節使用先進的無符號字節

+0

+ 1,你應該檢查'ToArray()'。 – sgtz

+0

並且只有在基於ReadTimeout的超時時才返回-1? – sgtz

+0

Nope,-1表示流結束,例如:您已經到達文件流的EOF – Ankur

0

我相信,與他們將從intbyte在reallllllly很好的方式,因爲ReadByte()返回一個int和他們byteArrayint[]類型。

5

表示。但其設計爲如果流的末尾已到達則返回-1。

現在這不會是Byte有效值(其無符號)

ms.Read(buf,0,lenth);這裏lenth是從流,你從ReadByte得到什麼要讀取的字節數是第一個字節它不是在使用這種方式,就像

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

+1 from me ty。 – sgtz