2012-01-17 14 views
6

イメージと小さなビデオファイル(約5MB、10MB未満)をRESTサービスに送信する必要があります。これは私が作成します。 私はこのタスクを達成するためにByte []またはStreamを使うべきかどうか疑問に思っています。 Byte []とStreamを使用する間の転送ファイルサイズの目安は何ですか?バイト配列を使用するタイミングとストリームを使用するタイミング

答えて

9

トランザクションにコミットする予定の空きメモリの量は、唯一の実際の制約です。

5Mファイルをお持ちの場合は、RAMにすべてをロードする必要があります。これには5Mがかかります。

ストリーミングする場合は、ファイルから小さいチャンクを再利用可能なバッファに読み込んで、HTTPストリームに書き込むことで、はるかに少ないメモリを使用できます。

5

最終的には、いずれかの方法でストリームを送信します。

大量のbyte[]として、コントロール外の別のソースからデータを受け取った場合は、不都合な場合を除いて、処理のためにそのフォームに保存しておき、ネットワークストリームにプッシュさせるこの線。

ストリームとして受け取った場合、別のストリームにプッシュされただけで大量のbyte[]になります。 4〜8 kiB(4〜8ではなく4または8)のバッファを使用してください。これは、メモリ全体のページの同時発生回数にいくつかの利点があります。

ストリームを自分で作成している場合、ストリームはほとんどの場合(バイナリやテキストライタでラップして処理します)、より効率的です。

もっと一般的には、8KB以上のバッファがストリームに書き込まれたり、ストリームから読み込まれたりしている場合、遅いと思われる場合は最初に変更を試みます。

0

バイト配列またはストリームを選択する際の一般的なテストは、データがあるかどうか、先頭から何バイトまでのデータがあるか、この数値が所定の目的に合っているかどうかによって異なります。

たとえば、ローカルマシンで使用できる小さなアイコンファイル(50KB未満)を扱っていてファイルサイズがわかっている場合は、バイト配列を使用します。

逆に、難しいと思われるムービーファイルを使用している場合、2GBのコンテンツを同時にメモリに保存する場合は、ストリームを使用してください。

ストリーミングは、長さが正面からわからない大きなデータセットまたはデータを処理する場合に最適です。

関連する問題