Como dice el título, estoy buscando la forma más rápida posible para escribir matrices de enteros en los archivos. Las matrices variarán en tamaño, y en realidad contendrán entre 2500 y 25 000 000 ints.¿La forma más rápida de escribir una matriz de enteros en un archivo en Java?
Aquí está el código que estoy usando actualmente:
DataOutputStream writer = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(filename)));
for (int d : data)
writer.writeInt(d);
Dado que DataOutputStream tiene un método para escribir arrays de bytes, lo he intentado convertir el int matriz a una matriz de bytes de esta manera:
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();
}
y como este:
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;
}
Ambos parecen dar un aumento de velocidad menor, alrededor del 5%. No los he probado con suficiente rigor para confirmarlo.
¿Hay alguna técnica que acelere esta operación de escritura de archivos, o guías relevantes de mejores prácticas para el rendimiento de escritura IO de Java?
¿Cómo quieres el contenido del archivo que desea formatear, exactamente? –
Al escribir el código usted mismo hará que el código no se haya calentado más rápido. Sin embargo, si ejecuta la prueba durante 5-10 segundos, verá si esto ha mejorado realmente. (Como JVM lo hará por usted) –
@Karl solo una secuencia de entradas sin formato. –