Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 结尾填充空字节的字节数组:如何高效地复制到较小的字节数组_Java_Arrays_Buffer - Fatal编程技术网

Java 结尾填充空字节的字节数组:如何高效地复制到较小的字节数组

Java 结尾填充空字节的字节数组:如何高效地复制到较小的字节数组,java,arrays,buffer,Java,Arrays,Buffer,拥有: 想要: 我有一个大小为8192的字节数组要开始,从第一个数组中的某个索引开始,直到数组结束,所有字节都是空字节。因此,在数组的末尾可能有6000个字节的值和2196个空字节。如何高效地创建一个大小为(6000)的新数组并将这些字节复制到另一个数组中?注意:我不知道将有多少空字节或带有值的字节。为什么不在system类中尝试静态方法数组复制?只需给出源数组src开始位置、目标数组、目标开始位置和长度 [46][111][36][11][101][55][87][30][122][75][6

拥有:

想要:


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

为什么不在system类中尝试静态方法数组复制?只需给出源数组src开始位置、目标数组、目标开始位置和长度

[46][111][36][11][101][55][87][30][122][75][66][32][49][55][67][77][88]
以下是我的尝试:

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

我想我们也可以这样做

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

使用
kotlin

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

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

新数组中的剩余字节将等于多少?你想做的事情没有多大意义。一个好的循环?如果数据部分中不能有零,则更简单。一个新的
字节[]
在所有元素中都有0,因此如果您希望在末尾有一个8192元素数组,则实际上不会完成任何事情。询问者指定他不知道有多少非零字节。这种方法只有在他事先知道的情况下才会起作用。我喜欢使用链锁。这是明确的,使它成为一个班轮!从末尾删除所有0字节是否安全。这不会有任何影响吗?
byte []array={0, 69, 0, 71, 0, 72};

byte ar[]=new String(array).replaceAll("\0", "").getBytes();
val strWithoutZeros = String(byteArray,StandardCharsets.UTF_8).replace(0.toChar().toString(), "")

val byteArrayWithoutZeros = strWithoutZeros.toByteArray(StandardCharsets.UTF_8)