ファイルの長さ全体の読み取りを要求した場合、インターネット上のファイルを表す入力ストリームから読み込むと、アンドロイドには、呼び出し後にバイト配列を部分的に埋めなければならない理由がありますか?アンドロイドのjavaで1回の読み込みでファイル全体を読むことはできますか?
答えて
Javaストリームのread(byte[])
メソッドは、要求されたバイト数よりも少ないバイト数を読み取ることがあります。
インターネット上のファイル私はあなたがHTTP URLの内容を意味するものと仮定します。
HTTPレスポンスの中にはContent-Lengthがあらかじめ与えられていないものもありますが、そうしているように正しいサイズのバイト配列をあらかじめ割り当てることはできません。
Androidで利用可能なApache HTTPクライアントライブラリには、URLのコンテンツを完全に取得し、適切なサイズのバイト配列として返すヘルパーメソッドEntityUtils.toByteArray()
が用意されています。メモリ内の全体の応答をリードすると常に最善の解決策ではないことを
public byte[] fetchURL(String url) throws IOException, ClientProtocolException {
HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet(url);
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
return EntityUtils.toByteArray(entity);
}
注:
は、ここでそれを使用してコードの一部です。ダウンロードの進捗状況をユーザーに報告するか、大きなドキュメントを段階的に解析することが望ましい場合があります。実際、応答はRAM(例えば、大きなビデオストリーム)に収まらないことさえある。
通常の読み取りコマンドは、要求された長さまでいくつかのバイト数を読み取ります。戻り値のチェックを含めることはプログラマに任されています(読み取られたバイト数を示します)。要求された長さ全体を読み込むreadFullyメソッドもありますが、それは非常に長い時間ブロックする可能性があり、大きなストリームを読み込んでいる途中で中断することはありません。
私のバイト配列は呼び出し後に部分的にしか埋めるべきではありません。
はい。あなたのアンドロイドアプリケーションは、read
コールから戻る前に、ストリーム全体がダウンロードされるのを待つ必要はありません。
特定の使用例では、これは(明らかに)迷惑です。他のユースケースでは、それはread
がこのように振る舞う重要な要件です:
アプリケーションが処理して、リモート・サーバは、まだデータを送信している間に、ユーザに結果を提供を開始する必要があるかもしれません。
リモートサーバーは、実際には、クライアントからの何らかのアプリケーションレベルの応答を待ってからデータを送信します。 (これはHTTPやFTPを使用している場合は適用されませんが、読み込んでいるストリームはおそらくトランスポート層のソケットストリームをラッピングしています。そのレベルではプレゼンテーションレイヤプロトコルの詳細については何も知られていません)
read
リターンがゼロになるまでループを使用して読み続ける:- Apache HttpClientを使用している場合は、応答の内容全体を取得する方法があります。
- Apache Commonsには、ストリームまたはリーダー全体を読み取るヘルパーメソッドを持つIOUtilsクラスが含まれています。
ソリューションです。
ところで、この動作は、read(byte[], ...)
メソッドのjavadocsで明示的に指定されています。
- 1. ファイルを1行ずつ読み込むときのパフォーマンス対ファイル全体を読み込むときの比較
- 2. C++ファイルから読み込むことができず、ベクターに読み込むことができません
- 3. 全体のページを読み込む
- 4. JavaのRandomAccessFileはメモリ内のファイル全体を読み込みますか?
- 5. ファイルから読み込み、Javaのファイルに書き込む
- 6. バネバッチ、行ごとに読み込む前に全体のcsvファイルを読む
- 7. ブートストラップモーダルポップアップで全体のビュー(スタイルとスクリプト)を読み込む方法
- 8. h5pyはファイル全体をメモリに読み込みますか?
- 9. ファイルの読み込みをリストの分割でリスト内包に組み込むことはできますか?
- 10. イメージをアンドロイドで読み込むには
- 11. ページ全体ではなくセクションのみを読み込むときに、jQueryをAjaxで実行しますか?
- 12. ファイル全体をPythonのリストに読み込む方法は?
- 13. JAVA-ファイル1の読み込みエラー(エラー)
- 14. ファイル全体を1行で読むPython
- 15. iPhoneアプリでコンピュータからファイルを読み込むことはできますか?
- 16. 外部ページを読み込むことはできますか?
- 17. BigTable asyncから読み込むことはできますか?
- 18. ファイルを読み込むことができません
- 19. .bmpファイルを読み込むことができませんwin32
- 20. メモリキー値ストアで複数回読み込みを書き込む
- 21. 私のクラスのオブジェクトにテキストファイルを読み込んで、JAVA ADFでVOを読むことはできますか?
- 22. ワードプレスでAJAXでページ全体を読み込む
- 23. WebWorkerでJavaScriptファイルを読み込むことはできますか?
- 24. MATLAB matファイルをRubyに読み込むことはできますか? Pythonで
- 25. アンドロイドでUSBドライブからファイルを読み込むには?
- 26. Pythonでファイルに書き込む、Arduinoでファイルを読み込む
- 27. Javaでファイルを読み込むときにコンパイルエラー
- 28. Javaでの同時読み込み/書き込みファイル
- 29. ページ全体の読み込みまで待機する
- 30. Javaでのファイル読み込み