2012-09-28 24 views
0

我有一個iOS應用程序,我正在使用NSInputStream(基於CFReadStreamRef)從網絡套接字讀取。我一直從服務器獲取數據,並不斷讀取和處理它(使用read:bytesBuffer maxLength:l)。它在前幾次工作正常,但在大約20-25次讀取時工作正常,這種方法報告它讀取了一個巨大的字節數。 4,294,967,295字節當我真的要求最大的說1-3MBytes。這是奇怪的,看起來像NSInputStream/CFReadStream API中的錯誤。NSInputStream讀取:maxlength:返回的方式更多的字節比maxlength

我的應用程序最終崩潰,因爲它試圖將所有這些字節加載到沒有針對字節的返回數分配的緩衝區(和服務器沒有在第一時間返回在此字節數!)

有任何人遇到過這個問題?

謝謝!

回答

3

read:maxLength:的返回值是NSInteger,對失敗將爲負值。您可能將其轉換爲無符號整數類型,將負數轉換爲巨大的正數。

+3

特別是,有符號32位-1 =無符號32位4,294,967,295。這個(連同255和65535)是每個程序員應該立即認識的數字。 (你不必記住所有的數字,但是當你看到一個大約42億的int時,它應該會產生一個紅旗。) – abarnert

+0

謝謝你們!這確實是問題所在。 –