Самый быстрый способ записать массив целых чисел в файл на Java?

Как сказано в заголовке, я ищу самый быстрый способ записи целочисленных массивов в файлы. Массивы будут различаться по размеру и реально будут содержать от 2500 до 25 000 000 int.

Вот код, который я сейчас использую:

DataOutputStream writer = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(filename)));

for (int d : data)
  writer.writeInt(d);

Учитывая, что DataOutputStream имеет метод записи массивов байтов, я попытался преобразовать массив int в массив байтов следующим образом:

private static byte[] integersToBytes(int[] values) throws IOException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    DataOutputStream dos = new DataOutputStream(baos);
    for (int i = 0; i < values.length; ++i) {
        dos.writeInt(values[i]);
    }

    return baos.toByteArray();
}

и вот так:

private static byte[] integersToBytes2(int[] src) {
    int srcLength = src.length;
    byte[] dst = new byte[srcLength << 2];

    for (int i = 0; i < srcLength; i++) {
        int x = src[i];
        int j = i << 2;
        dst[j++] = (byte) ((x >>> 0) & 0xff);
        dst[j++] = (byte) ((x >>> 8) & 0xff);
        dst[j++] = (byte) ((x >>> 16) & 0xff);
        dst[j++] = (byte) ((x >>> 24) & 0xff);
    }
    return dst;
}

Оба, похоже, дают небольшое увеличение скорости, примерно 5%. Я не тестировал их достаточно тщательно, чтобы подтвердить это.

Существуют ли какие-либо методы, которые ускорят эту операцию записи файла, или соответствующие руководства по передовой практике для производительности записи ввода-вывода Java?

13
задан skaffman 5 December 2010 в 13:05
поделиться