
HTTP通信で大容量のデータを受信する際の処理について
いつもお世話になっております。
現在、サーバーから大容量コンテンツ(動画など)をダウンロードして表示する処理を試してます。
テキストやサムネイル画像程度ならダウンロード出来るのですが10MB程度になるとメモリアウトオブエラーで落ちてしまいます。
分割してダウンロードするなど工夫が必要と思い色々試してみましたがうまく行きません。
------------現在下記様に記述してます。------------
int size;
InputStream in = con.getInputStream();
ByteArrayOutputStream out = new ByteArrayOutputStream();
while (true) {
size = in.read(w);
if (size <= 0) break;
out.write(w, 0, size);
}
------------------------------------------------------------------------
どなたか詳しい方、いらっしゃいましたらご教授のほどよろしくお願いします。
※モバイル環境(Android)のため省メモリです。
No.3ベストアンサー
- 回答日時:
一つの方法としては、
ダウンロードしたデータを部分的に収めるバッファを複数用意し、
データをダウンロードするスレッドとデータを表示するスレッドを作る。
ダウンロードスレッドは空きバッファにデータを埋めてゆき、
バッファが一杯になったら表示スレッドに報せ、
使える空きバッファが無くなったらそれができるまで休止状態に移行する。
表示スレッドは順次一杯になったバッファからデータを消費していき、
そのバッファのデータを消費しきったら空いたことをダウンロードスレッドに報せ、
ダウンロード中か空きのバッファしかなくなったら、
使えるバッファができるまで休止状態やnow loading表示に移行する。
どれくらいのサイズのバッファを何個用意するかは、対応させたい環境のメモリ容量と
ダウンロードスピードと表示スピード、表示品質などとの兼ね合いで調整する必要がある。
回答ありがとうございます。
ByteArrayStreamを使用してましたのでメモリに配置してファイルと言う方法でしたが、
FileOutStreamを使用してそのままファイルに保存することで解決しました。
上記方法も参考になりました。
ありがとうございます。
No.2
- 回答日時:
10M全部キャッシュしちゃっているのよね。
まめに書き出したらどお?
この回答への補足
askaaskaさん
回答ありがとうございます。
当方もそのようにしたいと思っておりますが、経験不足からどのように記述したらよいか分かりません。
一般的にどのように記述するのでしょうか?
上記プログラムを改良する形で色々と試しているのですが方法を見出せておりません。
もし最適な記述方法がありましたらご教授のほど宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP どうして送信されないのでしょうか? 1 2022/12/09 05:23
- PHP 記述のおかしいところを教えて下さい。 1 2023/02/03 11:25
- LINE LINEで動画を送信 その後表示した際の通信量の発生はどうなる? 1 2023/08/04 19:45
- その他(開発・運用・管理) WindowsからSSHでサーバーにあるファイルをダウンロードできない…。 3 2022/04/24 11:08
- その他(パソコン・スマホ・電化製品) アプリを開いたときに「通信に失敗しました 通信状態の良いところで 再度お試しください」と表示される 6 2022/09/20 10:19
- 英語 量を"size"で表現することの可否等について 1 2022/12/07 14:49
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「main メソッドを持つクラスが...
-
googleスプレッドシートのGASに...
-
JDONWROADER2のエラー修復
-
プログラミングの問題です。大...
-
直し方について教えて頂きたい...
-
Googleログインボタンのデザイ...
-
jdbcでinsert,delete,createをe...
-
正規表現について質問です。 カ...
-
プログラムの単体テストで金額...
-
問題作成のWebアプリの作り方を...
-
スプレッドシートからリマイン...
-
googleスプレッドシートのスク...
-
Verilogについて質問です。この...
-
論理回路設計をVerilogで行う問...
-
ゲーム開発の入門書を探しています
-
session,requestはjspで未定義...
-
サーブレットをapacheで公開す...
-
下記のリストならno002が含まれ...
-
is this even a thing?
-
JAの支部?地域の農協のカード...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JSPでリンクを利用してパラ...
-
includeアクションのflush属性...
-
サーブレットからパラメータをP...
-
iframeのsrc属性で指定したサー...
-
getElementsByTagNameのタグの...
-
submitとは?
-
Spreadの行数取得
-
Struts2でのスタイルシート利用...
-
ニューラルネットの対数変換に...
-
クエリのパラメータ
-
Zend Framework
-
C言語について。
-
C言語について。
-
jacascriptでのPOST送信について
-
C言語について。
-
UserForm
-
映画の撮影
-
平成の
-
もう1つの鉄拳を知りませんか?
-
派手なアクションはいつ頃から...
おすすめ情報