Быстрое чтение целых чисел с прямым порядком байтов из файла

Мне нужно прочитать двоичный файл, состоящий из 4-х байтовых целых чисел (little endian), в 2D-массив для моего приложения Android. Мое текущее решение следующее:

DataInputStream inp = null;
try {
    inp = new DataInputStream(new BufferedInputStream(new FileInputStream(procData), 32768));
}
catch (FileNotFoundException e) {
    Log.e(TAG, "File not found");
}

int[][] test_data = new int[SIZE_X][SIZE_Y];
byte[] buffer = new byte[4];
ByteBuffer byteBuffer = ByteBuffer.allocate(4);
for (int i=0; i < SIZE_Y; i++) {
    for (int j=0; j < SIZE_X; j++) {
        inp.read(buffer);
        byteBuffer = ByteBuffer.wrap(buffer);
        test_data[j][SIZE_Y - i - 1] = byteBuffer.order(ByteOrder.LITTLE_ENDIAN).getInt();
    }
}

Это довольно медленно для массива 2k * 2k, занимает около 25 секунд. Я вижу в DDMS, что сборщик мусора работает сверхурочно, так что это, вероятно, одна из причин медлительности.

Должен быть более эффективный способ использования ByteBuffer для чтения этого файла в массив, но я ' я не вижу этого в данный момент. Есть идеи, как это ускорить?

9
задан Mad Scientist 22 February 2011 в 12:29
поделиться