我正在开发 Android 平台上的测试应用程序。测试对 sdcard 的写入/读取速度。我用 NDK 接口用 C 语言编写。
首先,我编写了一个 for 循环来创建 256 个文件,每个文件有 512 个随机字节。这部分工作正常。我打开带有标志 O_CREAT|O_WRONLY|O_SYNC 和模式 0666 的文件。在调用 write 之后,我执行 sync() 以确保数据已写入卡上。
然后我编写了另一个 2 级 for 循环来读取这些文件以测试速度。我使用 O_RDWR|O_SYNC 打开文件。然后调用 read()。
事情是这样的:如果这是我第一次运行读取部分。读取的第一个循环比后面的循环花费更多时间。我确定这是因为在第一个循环之后,程序读取了缓存而不是真正的物理卡。
我试过 O_DIRECT 标志来读取。但它与 EINVAL 错误。在打开的手册页中,它说可能是因为该功能没有被平台实现。
您对如何在 Android 中使用无缓存读取有任何想法吗?