2011-06-21 3 views
16

Il existe Vector et DataOutputStream. J'ai besoin d'écrire des octets de Vector (toArray renvoie Byte []) au flux, mais il ne comprend que byte []. Comment convertir Byte [] en octet []?Java - Octet [] à octet []

+2

est plaisantait @ Nick. Vous pouvez noter qu'il appelle 'toLowerCase()' sur la chaîne '" Byte [] "'. Oui, je sais, en l'expliquant, j'ai gâché la blague. – Oded

+0

@Oded explications de blagues sont drôles en eux-mêmes :) – Atreys

Répondre

1

Un vecteur < L'octet> est à peu près aussi inefficace que vous pourriez utiliser pour stocker des octets. Je serais sérieux envisager d'utiliser quelque chose de plus efficace ligne ByteArrayOutputStream qui a une méthode toByteArray(). c'est-à-dire non seulement convertir le vecteur mais le retirer du code.

+1

Mon seul problème avec cela est que toutes les écritures sur le ByteArrayOutputStream exigent maintenant 'try {} catch() {}' sans raison réelle autre que celle qu'il hérite de OutputStream. – Huckle

+0

Je dirais que c'est un commentaire intéressant à la question plutôt qu'une réponse. –

+0

@TomasVinter Pour moi, parfois la meilleure réponse est de ne pas le faire, faites-le à la place. c'est-à-dire que vous ne faites qu'aggraver une mauvaise idée. ;) –

8
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; 
} 

freeone3000 ont contribué à cette réponse :)