2012年4月28日 星期六

Stream.Read 的限制

在早期寫 WinForm 時…這一、兩年接觸 WPF、Silverlight 時…
如果從網路上取回的資料量在幾 K 之內…
我個人在讀取 Stream 時經常是一次整串讀完…
也就是說我習慣宣告一個長度為 Stream.Length 的 Byte Array

最近在微軟新的框架 Windows Runtime 上發現一個異狀…
假設我宣告了一個長度為 10K 的 Byte Array 要裝某個 Stream 的內容…
在 Stream.Read 之後只被裝滿了前面 3K
這和 Visual Studio 的 Debuger 看到的長度正好一樣…

原本以為是 Bug 還找了主管和他說明這個狀況…
沒想到在主管的提醒下接了 Stream.Read 的回傳值一看才發現原因…
在 Windows RT 下 Stream.Read 似乎最多只會給 3K 的資料…
所以在讀 Stream 時最好是接個回傳值看看是不是少接資料了…
個人是全面改用迴圈的方式每次 3K 把 Stream 掃完…

在 Windows RT 的文件中 我並沒有找到這方面的說法…
所以也不確定未來會不會有什麼改變…
若是也有人碰到同樣的問題不妨先改用一次讀 3K 的方式試試看…

沒有留言:

張貼留言