将文件作为字节数组读取的最快方法是什么(在Android上)?该文件大约4 MB。它位于assets目录中,这意味着它可能已被压缩。
目前,我正在做这样的事情:
byte[] buffer = new byte[4 * 1024 * 1024];
context.getAssets().open(FILE_NAME).read(buffer);
在Android上,创建数组大约需要40毫秒,读取文件大约需要120毫秒。我怀疑40毫秒主要是用零填充数组。我可以避免这个吗?
该文件基本上是一个大约100,000个项目的列表,需要快速搜索。
答案 0 :(得分:0)
您可以使用RandomAccessFile类及其read方法来避免创建字节数组。 android page并没有太大的不同,但也可能有用。我使用RAF作为项目来存储和检索特定文件中的数据。 RAF对于这些任务非常有用。但是,读写越多,当然会大大增加运行时间。以下是其用法示例:
import java.io.RandomAccessFile;
import java.io.FileNotFoundException;
public class RAFTest {
public static void main(String[] args) {
RandomAccessFile raf;
String metadata = "This is a test file.";
try {
raf = new RandomAccessFile(args[0], "rw");
raf.writeUTF(metadata);
int[] nums = new int[10];
for(int i = 0; i < b.length; i++) {
nums[i] = i;
raf.writeInt(nums[i].getValue());
}
raf.seek(0); // force pointer to beginning
System.out.println(raf.readUTF());
int[] c = new int[5];
int byteJump = 4;
for(int i = 0; i < c.length; i++) {
raf.seek(raf.getFilePointer() + byteJump);
c[i] = raf.readInt();
System.out.println(c[i]);
}
} catch(Exception ex) { }
}
}