0

ネットワークソケットから読み取るために(CFReadStreamRefに基づいて)NSInputStreamを使用しているiOSアプリがあります。サーバーからデータを取得し続け、読み取りと処理を続けます ( read:bytesBuffer maxLength:lを使用)。最初の数回は正常に動作しますが、約 20 ~ 25 回目の読み取りで、このメソッドは、たとえば 1 ~ 3MBytes最大値を実際に要求したときに、 4,294,967,295バイトなどの膨大な数のバイトを読み取ったと報告します。これは奇妙で、NSInputStream/CFReadStream API のバグのようです。

これらすべてのバイトを、返されたバイト数に割り当てられていないバッファーにロードしようとすると、最終的にアプリがクラッシュします (そして、サーバーはそもそもこのようなバイト数を返していません!)

以前にこの問題に遭遇した人はいますか?

ありがとう!

4

1 に答える 1

3

からの戻り値read:maxLength:は、NSInteger失敗すると負になる です。おそらく、負の数を巨大な正の数に変える符号なし整数型にキャストしています。

于 2012-09-28T07:00:36.147 に答える