私の Android アプリケーションは、大きなファイルと非常に大きなファイル (つまり、サイズが 10MB から 2GB の間) を使用します。
安定したストレージのためにスマートフォンで使用されているハードウェアと、ソフトウェア (ファイルの読み取り/シーク) の考慮事項が PC のハードディスクと同様であるかどうかについて、私は常に疑問に思っていました。ハードウェアに関する情報を探して、それに関する何らかの画像 (内部ストレージ、SD カード) を見つけようとしましたが、調べた情報源のどれも包括的または具体的ではありませんでした。私の(相互に関連する)質問は次のとおりです。
- PC 用の Java アプリケーションで同じことを行うのと比較して、「最新の」スマートフォン (Android 2.2 フォンなど) で大きなファイルを読み取るときに考慮しなければならない主な違いは何ですか? (ディスクのシーク/読み取りパフォーマンスに関しては、明らかに、携帯電話のRAMはPCよりも小さいため、バッファなどの場合はこれを考慮する必要があります.)
- スマートフォンで使用されている安定したストレージ ハードウェアと PC のハードディスクとの (関連する) 主な違いは何ですか? (これは非常に幅広い質問であることを知っているので、ここでの非常に簡単な回答と、おそらくいくつかの信頼できる外部 URL に感謝します)
- 読み取りとシーク(skipBytes)に関して
InputStream
、内部ストレージとSDカードの使用に違いがありますか(Androidなど)(すべてのデバイスのSDカードであるとは限らないため、意図的に「外部ストレージ」とは書きませんでした) )? SDカードは遅いですか? - たとえば、2GB のファイルから 2MB のデータを読み取りたいとします。この 2MB のデータは、ファイルのさまざまな/離れた部分に分散しています。すべてのオフセットが既知であるため、オフセットの昇順を作成し、
BufferedInputStream.read()
(たとえば a でDataInputStream
) を使用してそれらを読み取ります (skipBytes()
必要な場合はシークに使用します)。したがって、基盤となるファイル システムでは、2 GB のファイル全体を「処理」する必要がある場合があります。(たとえば、Android は必要に応じて Linux の機能を使用してファイルをシークします。) しかし、シークは PC のハードディスクと同じくらい効率的ですか? シーク効率の観点から、SD カードと内部ストレージはどうですか? - 一般的なデータ読み取り速度は? (スマートフォンの内部ストレージ vs. SD カード vs. PC 非 SSD ハードディスク)
具体的なアプリケーションのベンチマークが必須であることはわかっていますが、この問題の理論的な説明も歓迎します。
重要: 「... PC のハードディスクと同じくらいの効率を求めていますか?」と尋ねるとき、私は絶対値を意味するのではなく、そのメカニズムも意味します。つまり、同じ論理原則に基づいて機能する場合 (= 可能な限り大きな部分をスキップする)、またはいくつかの欠点がある場合 (たとえば、そのような「スキップベースの」シークは SD カードでは不可能であり、したがってスキップははるかに多くの - - つまり、不均衡- PC のハードディスクよりもスマートフォンのハードウェアでは役に立たない)。