2017-02-07 2 views
1

Je suis en train de lire un fichier contenant une liste de hachages cryptés. Je pourrais juste les lire dans la mémoire comme List<String>.Quel est le meilleur modèle de mémoire de Java pour référencer les valeurs de hachage?

Ceci est une très grande liste et une chaîne peut-être un modèle de mémoire très inutile ... donc je voudrais savoir s'il y a une meilleure façon de stocker cette liste en mémoire. Par exemple, s'il s'agissait d'une liste de chaînes UUID, je les convertirais en List<UUID>.

Existe-t-il un équivalent pour Hash?


Désolé - voici un peu d'arrière-plan. Je fais des comparaisons spark-map/reduce, et je voudrais m'assurer que les hash en mémoire sont stockés aussi efficacement que possible. À partir des commentaires, il semble que je devrais les stocker dans byte-array. Donc, cela signifierait convertir la chaîne en hash-objet et obtenir le tableau d'octets ...

+1

En supposant que les hachages sont des chaînes codées en base64, vous pouvez décoder les chaînes et stocker chaque hachage sous la forme d'un tableau d'octets. Mais vous auriez besoin d'un très, très grand nombre de hachages dans le fichier pour avoir des problèmes de mémoire. Combien en avez-vous? Quelle est la taille du fichier Avez-vous vraiment besoin de tous les hachages en mémoire en premier lieu? –

+0

Si tous ont la même taille (en octets), vous ferez probablement mieux de lire des blocs d'octets. – renanlf

+0

@JBNizet quel est le sens du stockage des hachages comme tableaux d'octets pour le référencement? – Andremoniy

Répondre

0

Vous pouvez convertir un String en un tableau d'octets simplement en utilisant la méthode String.getBytes(). Notez que cela renvoie les octets qui composent la représentation de chaîne de la valeur de hachage, pas la valeur numérique du hachage. À la place, en supposant que vos valeurs de hachage sont des chaînes codées hexadécimales (base 16), vous pouvez utiliser la bibliothèque guava de Google. Il a une classe Hashing avec des utilitaires de hachage. Il a une classe HashCode qui stocke la valeur de hachage, par ex. dans un tableau d'octets (BytesHashCode). Cette classe a une méthode fromString(string) pour créer une instance HashCode à partir de laquelle vous pouvez obtenir la représentation byte array/long/int de la valeur réelle. Cette classe est plus ou moins équivalente à UUID dans votre exemple.

+0

exige goyave 15+ – hba