web-dev-qa-db-fra.com

Comment convertir byte [] en byte [], et inversement?

Comment convertir les octets [] en octets [], ainsi que les octets [] en octets [], si aucune bibliothèque tierce n’est utilisée? Existe-t-il un moyen de le faire rapidement en utilisant simplement la bibliothèque standard?

62
user926958

Byte class est un wrapper pour la primitive byte. Cela devrait faire le travail:

byte[] bytes = new byte[10];
Byte[] byteObjects = new Byte[bytes.length];

int i=0;    
// Associating Byte array values with bytes. (byte[] to Byte[])
for(byte b: bytes)
   byteObjects[i++] = b;  // Autoboxing.

....

int j=0;
// Unboxing Byte values. (Byte[] to byte[])
for(Byte b: byteObjects)
    bytes[j++] = b.byteValue();
43
Juvanis

octet [] à octet []:

byte[] bytes = ...;
Byte[] byteObject = ArrayUtils.toObject(bytes);

Octet [] à octet []:

Byte[] byteObject = new Byte[0];
byte[] bytes = ArrayUtils.toPrimitive(byteObject);
43
LaCrampe

Solution Java 8:

Byte[] toObjects(byte[] bytesPrim) {
    Byte[] bytes = new Byte[bytesPrim.length];
    Arrays.setAll(bytes, n -> bytesPrim[n]);
    return bytes;
}

Malheureusement, vous ne pouvez pas faire cela pour convertir de Byte[] à byte[]. Arrays a setAll pour double[], int[], et long[], mais pas pour les autres types primitifs.

14
ajb

Vous pouvez utiliser la méthode toPrimitive dans la classe ArrayUtils de la bibliothèque de lang Apache Commons lang, comme suggéré ici - Java - Byte [] à byte []

14
Giannis

De octet [] à octet []:

    byte[] b = new byte[]{1,2};
    Byte[] B = new Byte[b.length];
    for (int i = 0; i < b.length; i++)
    {
        B[i] = Byte.valueOf(b[i]);
    }

De Byte [] à byte [] (en utilisant notre B précédemment défini):

    byte[] b2 = new byte[B.length];
    for (int i = 0; i < B.length; i++)
    {
        b2[i] = B[i];
    }
5
DNA
byte[] toPrimitives(Byte[] oBytes)
{

    byte[] bytes = new byte[oBytes.length];
    for(int i = 0; i < oBytes.length; i++){
        bytes[i] = oBytes[i];
    }
    return bytes;

}

Inverse:

//byte[] to Byte[]
Byte[] toObjects(byte[] bytesPrim) {

    Byte[] bytes = new Byte[bytesPrim.length];
    int i = 0;
    for (byte b : bytesPrim) bytes[i++] = b; //Autoboxing
    return bytes;

}
4
jacktrades