2011-01-22 13 views
1

URLから大きなファイルを非同期でダウンロードし、データを処理する前に特定のサイズにバッファ(たとえば4096バイト)を埋め込む必要があります。 NSURLConnectionのようなビルトインオブジェクトを使うのは素晴らしいことですが、いくつかの問題があります。Objective-C:URLから特定のバッファサイズを読み取る

NSURLConnectionとすると、didReceiveData:dataメッセージは、いつ発火するかを決定します。たとえば、最初に954バイトを受け取った後、ダウンロードが完了するまで1048バイトを受け取ることがあります。とにかく私はNSURLConnection私は受信メッセージを発射する前に必要なバッファサイズに読み込むように強制的に変更することはできますか?

私もCFNetworkクラスを使ってみましたが、これはもっと難しくなり、可能であれば避けたいと思います。

よく知られているAsyncSocketクラスを使用してこれを実現できますが、HTTPヘッダーを解析する必要があり、他のWebサーバー構成で問題が発生する可能性が高くなります。

ありがとうございます。

答えて

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

関連する問題