Подтвердить что ты не робот

Байт-массив с заполнением нулевых байтов в конце: как эффективно копировать в меньший байт-массив

Есть:

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

Want:

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

У меня есть массив байтов размером 8192 для запуска и начиная с некоторого индекса в этом первом массиве до конца массива байты - все нулевые байты. Таким образом, в конце массива может быть 6000 байтов со значениями и 2196 нулевых байтов. Как эффективно создать новый массив размера (6000) и скопировать эти байты? Примечание. Я не знаю, сколько нулевых байтов или байтов со значениями будет.

4b9b3361

Ответ 1

Вот моя попытка:

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

Ответ 2

почему бы не попробовать копировать массив статических методов в системном классе, просто укажите начальную позицию исходного массива src, целевой массив, начальную позицию назначения и длину

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

Ответ 3

Я думаю, что мы можем сделать так же

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

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