J'ai deux tableaux d'octets et je me demande comment je pourrais en ajouter un ou les combiner pour former un nouveau tableau d'octets.
- Méthode simple pour concaténer deux tableaux d'octets (5 réponses )
Réponses
Trop de publicités?Vous essayez juste de concaténer les tableaux de deux octets?
byte[] one = getBytesForOne();
byte[] two = getBytesForTwo();
byte[] combined = new byte[one.length + two.length];
for (int i = 0; i < combined.length; ++i)
{
combined[i] = i < one.length ? one[i] : two[i - one.length];
}
Ou vous pouvez utiliser System.arraycopy:
byte[] one = getBytesForOne();
byte[] two = getBytesForTwo();
byte[] combined = new byte[one.length + two.length];
System.arraycopy(one,0,combined,0 ,one.length);
System.arraycopy(two,0,combined,one.length,two.length);
Ou vous pouvez simplement utiliser une liste pour faire le travail:
byte[] one = getBytesForOne();
byte[] two = getBytesForTwo();
List<Byte> list = new ArrayList<Byte>(Arrays.<Byte>asList(one));
list.addAll(Arrays.<Byte>asList(two));
byte[] combined = list.toArray(new byte[list.size()]);
String temp = passwordSalt;
byte[] byteSalt = temp.getBytes();
int start = 32;
for (int i = 0; i < byteData.length; i ++)
{
byteData[start + i] = byteSalt[i];
}
Le problème avec votre code ici est que la variable i utilisée pour indexer les tableaux va à la fois au-delà du tableau byteSalt et du tableau byteData. Donc, assurez-vous que byteData est dimensionné pour être au moins égal à la longueur maximale de la chaîne passwordSalt plus 32. Ce qui va corriger cela remplace la ligne suivante:
for (int i = 0; i < byteData.length; i ++)
avec:
for (int i = 0; i < byteSalt.length; i ++)
J'ai utilisé ce code qui fonctionne très bien. Il suffit d'appendData et de transmettre un seul octet avec un tableau, ou deux tableaux pour les combiner:
protected byte[] appendData(byte firstObject,byte[] secondObject){
byte[] byteArray= {firstObject};
return appendData(byteArray,secondObject);
}
protected byte[] appendData(byte[] firstObject,byte secondByte){
byte[] byteArray= {secondByte};
return appendData(firstObject,byteArray);
}
protected byte[] appendData(byte[] firstObject,byte[] secondObject){
ByteArrayOutputStream outputStream = new ByteArrayOutputStream( );
try {
if (firstObject!=null && firstObject.length!=0)
outputStream.write(firstObject);
if (secondObject!=null && secondObject.length!=0)
outputStream.write(secondObject);
} catch (IOException e) {
e.printStackTrace();
}
return outputStream.toByteArray();
}