14

我的 Android 应用程序将使用大文件和非常大的文件(即大小在 10MB 和 2GB 之间)。

我一直想知道智能手机使用什么硬件来进行稳定存储,以及软件(文件读取/查找)考虑是否与 PC 硬盘相似。我试图查找有关硬件的信息并获得一些关于它的图片(内部存储、SD 卡),但我检查的所有来源都不够全面和/或具体。我的(相互关联的)问题是:

  1. 在“现代”智能手机(例如 Android 2.2. 手机)上读取大文件时,与在 PC 上使用 Java 应用程序执行相同操作时,我必须考虑哪些主要差异?(就磁盘查找/读取性能而言;显然,手机 RAM 比 PC 小,因此在缓冲区等情况下必须考虑到这一点。)
  2. 与 PC 硬盘相比,智能手机中使用的稳定存储硬件有哪些(相关的)主要区别?(我知道这是一个非常广泛的问题,所以我什至很欣赏这里的一个非常简短的答案,可能还有一些可靠的外部 URL)
  3. InputStream读取和查找(skipBytes)方面,使用内部存储和SD卡之间是否有区别(例如在Android上)(我故意没有写“外部存储”,因为它不一定是每个设备上的SD卡)? SD卡慢吗?
  4. 例如,我想从一个 2GB 的文件中读取 2MB 的数据,而这 2MB 的数据分布在文件的许多不同/遥远的部分。所有偏移量都是已知的,因此我创建了一个升序的偏移量,然后使用BufferedInputStream.read()(例如在 a 中DataInputStream)来读取它们(并skipBytes()在必要时用于查找)。因此,在底层文件系统中,这可能需要“遍历”整个 2GB 文件。(例如,Android 在需要时使用 linux 函数在文件中查找。)但是,查找是否与在 PC 硬盘中一样有效?SD卡与内部存储在寻道效率方面如何?
  5. 典型的数据读取速度是多少?(智能手机内部存储 vs. SD 卡 vs. PC 非 SSD 硬盘)

我知道对我的具体应用程序进行基准测试是必须的,但我也欢迎对此事进行理论上的澄清。

重要提示:当我问“......寻求与 PC 硬盘一样高效?”时,我(仅)不是指绝对值,还指它的机制。也就是说,如果它基于相同的逻辑原理工作(= 尽可能跳过大部分),或者存在一些缺点(例如,在 SD 卡上不可能进行这种“基于跳过”的搜索,因此跳过更多 - - 即不成比例- 在智能手机硬件上比在 PC 硬盘上没用)。

4

2 回答 2

2

试图回答你的问题

  1. 只有一个区别,那就是如果您的文件在应用程序包中(在应用程序内),因为您需要使用不同的方法打开它,但是如果它在应用程序包内并进入package/file/,那么您可以使用相同的 File 文件布拉...

  2. 智能手机的内存比 HDD 快,但如果将其存储在外部 SDC 卡中,这将改变,因为 SDC 卡具有最高的读写速度。

  3. 是的,有区别...如果从内部或 SDCard(不是外部 SD 卡)读取,否则我们不应该使用 1 或 2GB 和 16Gb 的设备进行存储。它在主内存中的所有内容都会运行得更快。

  4. 查找始终是一项缓慢的任务,即使您没有到达文件末尾,您也可以获得关闭流所需的所有日期。你可以做的更快的是每次你的应用程序读取了一些 KB 或 MB 时重新加载缓存......而不是你可以午餐 asyncTask 去加载它,一旦主线程完成将寻找更多数据如果存在。这应该会加快很多,因为您将只在内存中进行搜索。

  5. You will need a app for that or write your own, that shouldn't be too difficult, you can use handler, and load as much as you can in an array or list, and count the bytes, and repeat it on other memory types (internal SD card and external SDCard).

于 2012-10-31T01:37:56.283 回答
1

你的问题太具体了,需要太多的数据:-)我认为很难找到另一个对你有非常具体要求的人。

一般来说,SD卡数据访问速度不仅取决于驱动硬件(设备),还取决于卡本身和要访问的软件(Android版本)。

另一方面,您可以在以下位置找到有关 SD 卡速度的一些信息:

即使在 Google Play 上,您也可以找到一些应用程序来测试您设备上 SD 卡的速度(搜索 SD Card Tester、SD Tools 等)

于 2012-10-31T00:04:34.830 回答