末尾填充空字节的字节数组:如何有效地复制到较小的字节数组

2022-09-01 22:36:27

有:

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

要:

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

我有一个字节大小为8192的数组开始,从第一个数组中的某个索引开始,直到数组的末尾,字节都是空字节。因此,数组中可能有 6000 个带值的字节和 2196 个空字节。如何有效地创建一个大小为 (6000) 的新数组并将这些字节复制过来?注意:我不知道会有多少空字节或带值的字节。


答案 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);