簡體   English   中英

最后填充 null 字節的字節數組:如何有效地復制到較小的字節數組

[英]Byte array with padding of null bytes at the end: how to efficiently copy to smaller byte array

有:

[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 的數組開始,從第一個數組中的某個索引開始,直到數組的末尾,字節都是 null 字節。 因此,數組末尾可能有 6000 字節的值和 2196 null 字節。 如何有效地創建一個新的大小為 (6000) 的數組並將這些字節復制過來? 注意:我不知道會有多少 null 字節,或者有值的字節。

這是我的嘗試:

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

為什么不在系統類中嘗試靜態方法數組副本只需給出源數組src的起始位置,目標數組,目標起始位置和長度

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

我想我們也可以這樣做

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

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

使用 java string trim() 的另一個選項:

byte[] array={65, 66, 67, 0, 0, 0};

byte[] trimmedArray = new String(array).trim().getBytes();

kotlin

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

val byteArrayWithoutZeros = strWithoutZeros.toByteArray(StandardCharsets.UTF_8)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM