Objective-C: чтение определенного размера буфера из URL - PullRequest
1 голос
/ 22 января 2011

Мне нужно загружать большие файлы с URL-адреса асинхронно и заполнять буфер (например, 4096 байт) до определенного размера перед обработкой данных. Было бы здорово использовать встроенный объект, такой как NSURLConnection, но у меня возникли некоторые проблемы.

При NSURLConnection сообщение didReceiveData:data решает, когда запускать самостоятельно. Например, я мог бы получить 954 байта в первый раз и впоследствии 1048 байтов, пока он не закончил загрузку. Могу ли я в любом случае изменить NSURLConnection, чтобы заставить его считываться до нужного мне размера буфера, прежде чем запускать полученное сообщение?

Я также изучил использование классов CFNetwork, но это кажется намного сложнее, и я хотел бы избежать этого, если это возможно.

Кроме того, я мог бы добиться этого, используя хорошо известный класс AsyncSocket, но тогда мне пришлось бы анализировать HTTP-заголовки, и у меня было ощущение, что возникнут дополнительные проблемы с другими конфигурациями веб-сервера.

Заранее спасибо.

1 Ответ

1 голос
/ 22 января 2011

С NSURLConnection вы все равно должны прочитать данные в свой собственный буфер (например, объект NSData). Так почему бы просто не читать из этого буфера каждые 4096 байт?

Похоже, вы заинтересованы только в обработке данных по мере их поступления, а не в сохранении их всех. Поэтому, возможно, вы могли бы сделать что-то подобное при получении данных (псевдокод):

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

А затем обработать все, что осталось (при необходимости), когда соединение закрывается.

...