Je voudrais construire un hashmap à partir d'un fichier binaire. Ce fichier binaire a la structure suivante: le premier entier indique le nombre d'entiers que je dois lire dans le flux afin de construire le hashmap suivi par les paires clé/valeur.Comportement étrange de DataInputStream
Donc, pour un hashmap avec trois valeurs j'avoir un total de 7 entiers:
1 int à lire - clé 2 - 3 valeur - touche 4 - 5 valeur - clé 6 - 7 valeur
Comment est-il possible que les deux codes suivants aient deux résultats différents? La seule différence est que dans le premier exemple j'utilise une variable auxiliaire un pour stocker la valeur des octets à lire. Dans le second, je l'utilise directement dans la boucle for.
static Int2IntMap fetchHashMap(Int2IntMap map, DataInputStream DIS) throws IOException {
int a = DIS.readInt();
for (int i = 0; i < a; i++) {
map.put(DIS.readInt(),DIS.readInt());
}
return map;
}
Ce code est sans variable auxiliaire:
static Int2IntMap fetchHashMap(Int2IntMap map, DataInputStream DIS) throws IOException {
for (int i = 0; i < DIS.readInt(); i++) {
map.put(DIS.readInt(),DIS.readInt());
}
return map;
}
Les travaux antérieurs mieux que celui-ci, mais il est toujours incompatible avec la structure que je me attends.
Je ne sais pas si c'est pertinent mais mon implémentation utilise le multi-thread, mais chaque thread a son propre DataInputStream.
En ce qui concerne votre thread avec chaque thread ayant son propre 'DataInputStream', chacun d'eux lit-il aussi son propre fichier? – Kayaman
oui, chaque thread a son propre fichier – Aalto