Avoir:
[46][111][36][11][101][55][87][30][122][75][66][32][49][55][67][77][88][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0]
Vouloir:
[46][111][36][11][101][55][87][30][122][75][66][32][49][55][67][77][88]
J'ai un tableau d'octets de taille 8192 pour commencer, et à partir d'un index dans ce premier tableau jusqu'à la fin du tableau, les octets sont tous des octets nuls. Donc, il pourrait y avoir 6000 octets avec des valeurs et 2196 octets nuls à la fin du tableau. Comment créer efficacement un nouveau tableau de taille (6000) et copier ces octets? Note: Je ne sais pas combien d’octets NULL, ou d’octets avec des valeurs, il y en aura.
Voici mon essai:
static byte[] trim(byte[] bytes)
{
int i = bytes.length - 1;
while (i >= 0 && bytes[i] == 0)
{
--i;
}
return Arrays.copyOf(bytes, i + 1);
}
public static void main(String[] args)
{
byte[] bytes = { 0, 1, 2, 0, 3, 4, 5, 0, 6, 0, 0, 7, 8, 9, 10, 0, 0, 0, 0 };
byte[] trimmed = trim(bytes);
return;
}
pourquoi ne pas essayer la copie du tableau de la méthode statique dans la classe système, il suffit de donner la position de départ du tableau source, le tableau de destination, la position de départ et la longueur
System.arraycopy(src, srcPos, dest, destPos, length);
byte [] dest= new byte [6000];
System.arraycopy(src, 0, dest, 0, 6000);
Je pense que nous pouvons faire de cette façon aussi
byte []array={0, 69, 0, 71, 0, 72};
byte ar[]=new String(array).replaceAll("\0", "").getBytes();
Avec kotlin
:
val strWithoutZeros = String(byteArray,StandardCharsets.UTF_8).replace(0.toChar().toString(), "")
val byteArrayWithoutZeros = strWithoutZeros.toByteArray(StandardCharsets.UTF_8)