Самый быстрый способ прочитать огромное количество int из двоичного файла

Я использую Java 1.5 на встроенном устройстве Linux и хочу прочитать двоичный файл с 2 МБ значений int. (сейчас 4 байта Big Endian, но я могу решить, формат)

С помощьюDataInputStream с помощьюBufferedInputStream с помощьюdis.readInt()), эти 500 000 вызовов требуют 17 секунд для чтения, но для чтения файла в один большой байтовый буфер требуется 5 секунд.

Как я могу прочитать этот файл быстрее в один огромный int []?

Процесс чтения не должен использовать более 512 КБ.

Этот код ниже, используяnio не быстрее, чем метод readInt () из Java IO.

    // asume I already know that there are now 500 000 int to read:
    int numInts = 500000;
    // here I want the result into
    int[] result = new int[numInts];
    int cnt = 0;

    RandomAccessFile aFile = new RandomAccessFile("filename", "r");
    FileChannel inChannel = aFile.getChannel();

    ByteBuffer buf = ByteBuffer.allocate(512 * 1024);

    int bytesRead = inChannel.read(buf); //read into buffer.

    while (bytesRead != -1) {

      buf.flip();  //make buffer ready for get()

      while(buf.hasRemaining() && cnt < numInts){
       // probably slow here since called 500 000 times
          result[cnt] = buf.getInt();
          cnt++;
      }

      buf.clear(); //make buffer ready for writing
      bytesRead = inChannel.read(buf);
    }


    aFile.close();
    inChannel.close();

Обновление: оценка ответов:

На ПК карта памяти с подходом IntBuffer была самой быстрой в моей установке.

На встроенном устройстве без jit функция java.io DataiInputStream.readInt () была немного быстрее (17 с против 20 с для MemMap с IntBuffer)

Заключительный вывод. Значительного ускорения легче достичь с помощью алгоритмических изменений. (Меньший файл для init)

Ответы на вопрос(3)

Ваш ответ на вопрос