it-swarm.com.de

Byte-Array mit Auffüllen von Null-Bytes am Ende: effizientes Kopieren in ein kleineres Byte-Array

Haben:

[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]

Wollen:

[46][111][36][11][101][55][87][30][122][75][66][32][49][55][67][77][88]

Ich habe ein Array von Bytes mit der Größe 8192 und beginnend mit einem Index in diesem ersten Array bis zum Ende des Arrays sind die Bytes alle null Bytes. Es können also 6000 Bytes mit Werten und 2196 Nullbytes am Ende im Array vorhanden sein. Wie erstelle ich effizient ein neues Array mit einer Größe (6000) und kopiere diese Bytes? Hinweis: Ich weiß nicht, wie viele Null-Bytes oder Bytes mit Werten vorhanden sind.

18
Atomix

Hier ist mein Versuch:

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;
}
29
Pragmateek

warum versuchen Sie nicht, die Kopie der statischen Methode in der Systemklasse zu kopieren? Geben Sie einfach die Quellposition src-Startposition, Zielarray, Zielstartposition und die Länge an

        System.arraycopy(src, srcPos, dest, destPos, length);
        byte [] dest= new byte [6000];
        System.arraycopy(src, 0, dest, 0, 6000);
7
Mohammed Falha

Ich denke, wir können das auch so machen

byte []array={0, 69, 0, 71, 0, 72};

byte ar[]=new String(array).replaceAll("\0", "").getBytes();
6

Mit kotlin:

val strWithoutZeros = String(byteArray,StandardCharsets.UTF_8).replace(0.toChar().toString(), "")

val byteArrayWithoutZeros = strWithoutZeros.toByteArray(StandardCharsets.UTF_8)
0
Nilesh Deokar