2011-01-22 5 views
1

URL에서 대용량 파일을 비동기 적으로 다운로드하고 데이터를 처리하기 전에 버퍼 (예 : 4096 바이트)를 특정 크기로 채워야합니다. NSURLConnection과 같은 내장 객체를 사용하는 것이 좋지만 몇 가지 문제가 있습니다.Objective-C : URL의 특정 버퍼 크기 읽기

NSURLConnection으로, didReceiveData:data 메시지는 언제 발사 할 것인지를 결정합니다. 예를 들어, 다운로드가 완료 될 때까지 954 바이트를 처음 수신 한 다음 1048 바이트를 수신 할 수 있습니다. 어쨌든 NSURLConnection을 수정하여 수신 메시지를 시작하기 전에 필요한 버퍼 크기로 강제로 읽을 수 있습니까?

CFNetwork 클래스도 사용하고 있지만이 방법은 더 어려워 보이며 가능하면 사용하지 않으려합니다.

또한 잘 알려진 AsyncSocket 클래스를 사용하여이를 수행 할 수도 있지만 HTTP 헤더를 구문 분석해야하고 다른 웹 서버 구성과 관련하여 문제가 더 많아지는 느낌이들 것입니다.

미리 감사드립니다.

답변

1

NSURLConnection을 사용하면 데이터를 자체 버퍼 (예 : NSData 객체)로 읽어야합니다. 그렇다면 4096 바이트마다 버퍼를 읽지 않는 이유는 무엇입니까?

데이터가 도착할 때만 처리하고 모든 데이터를 유지하는 데 관심이없는 것 같습니다. 당신은 데이터 (의사)를받을 때마다 그래서 아마 당신이 뭔가를 할 수 있습니다 : 연결이 닫힐 때 (필요한 경우) 남아있는 어떤

while buffer.size > 4096: 
    copy first 4096 bytes into separate buffer 
    process separate buffer 
    delete first 4096 bytes from buffer 

그리고 과정을.

+0

완벽한 덕분에! – Jim