Мне нужно прочитать двоичный файл, состоящий из 4-х байтовых целых чисел (little-endian), в двумерный массив для моего приложения 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 для чтения этого файла в массив, но в данный момент я его не вижу. Есть идеи, как это ускорить?