La conversion de BitSet de tableau d'Octets
J'ai ramassé cet exemple de ici qui convertit BitSet de tableau d'Octets.
public static byte[] toByteArray(BitSet bits) {
byte[] bytes = new byte[bits.length()/8+1];
for (int i=0; i<bits.length(); i++) {
if (bits.get(i)) {
bytes[bytes.length-i/8-1] |= 1<<(i%8);
}
}
return bytes;
}
Mais dans les forums de discussion, j'ai vu que par cette méthode, nous avons l'habitude de les obtenir tous les bits que nous allons perdre un peu par calcul. Est-ce vrai? Devons-nous modifier la méthode ci-dessus?
le lien exampledepot.com/egs/java.util/Bits2Array.html est expiré, vous souvenez-vous de ce qu'a été l'exemple?
OriginalL'auteur JavaBits | 2011-06-01
Vous devez vous connecter pour publier un commentaire.
Non, c'est bien. Le commentaire sur le post a été relatifs à la autres morceau de code dans le post, la conversion à partir d'un tableau d'octets à un
BitSet
. J'utiliserais plutôt plusieurs espaces, certes.Aussi cela peut finir avec un tableau qui est plus que nécessaire. La création de la matrice d'expression pourrait être:
Cela laisse de la place pour autant de bits sont nécessaires, mais pas plus. Fondamentalement, c'est l'équivalent de "Diviser par 8, mais toujours rond."
OriginalL'auteur Jon Skeet
Si vous avez besoin de la BitSet dans l'ordre inverse en raison de endian, change:
:
OriginalL'auteur Lars Lynch
Cela fonctionne très bien pour moi. si vous utilisez Java 1.7, alors il a le la méthode
toByteArray()
.Sauer, Ouais nom officiel de Java 7. Je viens de vous parler de la version. De toute façon, merci de me corriger.
Soyez prudent avec BitSet.toByteArray() car il ne peut pas sérialiser les octets dans l'ordre que vous attendez.
BitSet notEqual = BitSet.valueOf(bitset.toByteArray()); // This doesn't work.
Aussi, de lien brisé.
OriginalL'auteur Kamahire
Pour info, à l'aide de
pour récupérer la taille de la bitset peut retourner des résultats incorrects; j'ai dû modifier l'exemple original d'utiliser la méthode size() pour obtenir la taille définie pour la bitset (alors que length() renvoie le nombre de bits). Voir le thread ci-dessous pour plus d'info.
java.util.BitSet -- set() ne fonctionne pas comme prévu
length
aussi fait quelque chose d'autre:BitSet bits = new BitSet(16); System.out.println("BITSET LEN=" + bits.size());
donne:BITSET LEN=64
(bits de taille de mémoire utilisée, je suppose).OriginalL'auteur ryanbwork