Как говорится в названии, я ищу самый быстрый способ записи целочисленных массивов в файлы. Массивы будут различаться по размеру и будут реально содержать от 2500 до 25 000 000 ints.
Вот код, который я сейчас использую:
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%. Я не проверял их достаточно строго, чтобы подтвердить это.
Существуют ли какие-либо методы, которые ускорят эту операцию записи файла, или соответствующие руководства по наилучшей практике для производительности записи в IO для Java?