Comme le titre l'indique, je cherche le moyen le plus rapide possible d'écrire des tableaux entiers dans des fichiers. Les matrices varieront en taille et contiendront de manière réaliste entre 2500 et 25 000 000 ints.Le moyen le plus rapide d'écrire un tableau d'entiers dans un fichier Java?
Voici le code que je utilise actuellement:
DataOutputStream writer = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(filename)));
for (int d : data)
writer.writeInt(d);
Étant donné que DataOutputStream a une méthode pour écrire des tableaux d'octets, j'ai essayé de convertir le tableau int à un tableau d'octets comme ceci:
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();
}
et comme ceci:
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;
}
Les deux semblent donner une légère augmentation de la vitesse, environ 5%. Je ne les ai pas testés assez rigoureusement pour le confirmer.
Y a-t-il des techniques qui accélèreront cette opération d'écriture de fichier ou des guides pertinents sur les meilleures pratiques pour les performances d'écriture Java IO?
Comment voulez-vous que le contenu du fichier à formater, exactement? –
Si vous insérez le code vous-même, le code ne s'est pas réchauffé plus rapidement. Cependant si vous exécutez le test pendant 5-10 secondes, vous verrez si cela a fait une réelle amélioration. (Comme il JVM le fera pour vous) –
@Karl juste une séquence d'ints sans formatage. –