2010-09-16 95 views
0
public static void ReadWholeArray (Stream stream, byte[] data) 
{ 
    int offset=0; 
    int remaining = data.Length; 
    while (remaining > 0) 
    { 
     int read = stream.Read(data, offset, remaining); 
     if (read <= 0) 
      throw new EndOfStreamException(String.Format("End of stream reached with {0} bytes left to read", remaining)); 
     remaining -= read; 
     offset += read; 
    } 
} 

字節數組數據的大小是2682 上的while循環 讀取的值是1658 上下一迭代 第一次迭代執行所述線後問題()在C#.net方法

int read = stream.Read(data, offset, remaining); 

的程序沒有響應

是什麼問題?

+0

是種重要的是能夠正確地回答你 – jgauffin 2010-09-16 12:40:33

+0

你爲什麼要讀從人工流數據? – Grzenio 2010-09-16 12:41:09

+0

Grzenio!什麼是從流 – 2010-09-16 12:54:34

回答

1

無論什麼是提供您的流阻塞,直到數據可用。從MSDN的文檔上Stream.Read

的實施,將阻塞,直到在數據 至少一個字節可以被讀取,在 沒有數據可用的情況下。只有當沒有 流中更多的數據,並沒有更多的是 預期(如關閉的套接字或文件的 結束)

您可以在流,設置讀超時,以防止 讀返回0永遠阻止。另外,請注意,從流中讀取將移動當前位置,因此使用偏移邏輯,您可能會跳過大塊輸入流。

0

您尚未在流中設置ReadTimeout,並且沒有數據,因此呼叫會阻塞,直到數據可用。

檢查Stream .ReadTimeout和.WriteTimeout的屬性。另外,請記住,你知道你需要的數據,但不知道會有多少數據(失敗,錯誤等),所以你也應該檢查一下。

-1

你可以試試這個。此代碼將讀取流的字節到字節[]:知道那種流的

public static byte[] GetBytesFromStream() 
    { 
     FileStream fs = new FileStream("d:/pic.jpg", FileMode.Create); 
     byte[] bytes = new byte[fs.Length]; 
     fs.Read(bytes, 0, (int)fs.Length); 
     fs.Close(); 
     return bytes; 
    } 
+0

讀取數據的其他方式這仍然存在FileStream.Read沒有回調所有數據的問題,所以你需要一個循環來確保所有的數據都被讀取。 – SwDevMan81 2010-09-16 13:15:25

+0

已經有一種方法。 File.ReadAllBytes() – Bryan 2010-09-16 16:01:35