我在文件中有二进制数据(32位整数值列表),我需要有效地进入int数组。除了将数据加载到byte []然后一次将其转换为int []一个元素之外,我无法看到任何方法。这对于我需要加载的数据量来说太慢了。在实际手机上进行转换大约需要3秒钟。从byte []中读取文件中的数据非常快速。
是否有任何库使用本机方法从文件中读取int [],或者将byte []转换为int []?
答案 0 :(得分:1)
你有没有试过这样的东西:
File file = new File("binary.file");
FileInputStream fin = new FileInputStream(file);
BufferedInputStream bin = new BufferedInputStream(fin);
DataInputStream din = new DataInputStream(bin);
int count = (int) (file.length() / 4);
int[] values = new int[count];
for (int i = 0; i < count; i++) {
values[i] = din.readInt();
}
即使在手机上,这也应该相对较快,除非你只是处理一个巨大的档案。
答案 1 :(得分:1)
您是否尝试过NIO package的课程?类ByteBuffer有一个方法asIntBuffer(),您可以在其中获取ByteBuffer的IntBuffer视图。然后,您应该可以通过调用get(int[] dst)来获取整数内容。
使用file channels可以使用初始的ByteBuffer。
答案 2 :(得分:0)
我使用序列化/反序列化,DataInputStream和ObjectInputStream进行了相当仔细的实验,两者都基于ByteArrayInputStream以避免IO效应。对于一百万个整数,readObject约为20毫秒,readInt约为116.百万个int数组的序列化开销为27个字节。
话虽如此,对象序列化有点邪恶,你必须用Java程序写出数据。