2012-09-28 3 views
0

네트워크 소켓에서 읽기 위해 NSInputStream (CFReadStreamRef 기반)을 사용하는 iOS 앱이 있습니다. 계속 서버에서 데이터를 가져오고 계속 읽고 읽고 처리합니다 (읽기 : bytesBuffer maxLength : l). 처음 몇 번은 정상적으로 작동하지만 20-25 일 정도 읽으면이 방법을 사용하면 HUGE 바이트 수가 표시됩니다. 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

고마워요! 이것은 정말로 문제였습니다. –

관련 문제