java - 在末尾填充空字节的字节数组 : how to efficiently copy to smaller byte array

标签 java arrays buffer

有:

[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)并复制这些字节?注意:我不知道会有多少空字节,或者有值的字节。

最佳答案

这是我的尝试:

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

关于java - 在末尾填充空字节的字节数组 : how to efficiently copy to smaller byte array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17003164/

相关文章:

python - 将形状 (n,) 的数组转换为形状 (n,1) 的 numpy 数组

c++ - OpenCL:从主机到设备缓冲区的并行写入?

c - 为什么即使目标缓冲区为零,strncpy 也能够复制源字符串?

emacs 以编程方式更改窗口大小

java - 向 JButton 添加 Action 监听器

java - 在 linux 操作系统的 java 中获取主板和硬盘的 ID?

java-如何使用循环验证函数检查文本字段列表

java - hibernate 与 Derby : Cannot close a connection while a transaction is still active

php - 将数组中的值添加到数组?

java - 为什么扫描仪输入在这种特定情况下显示错误?