23

もつ:

[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 バイト、または値を持つバイトがいくつあるかはわかりません。

4

4 に答える 4

34

これが私の試みです:

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;
}
于 2013-06-08T22:26:42.417 に答える
7

この方法でもできると思います

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

byte ar[]=new String(array).replaceAll("\0", "").getBytes();
于 2016-06-23T08:45:18.727 に答える
7

システムクラスで静的メソッド配列のコピーを試してみませんか?ソース配列 src start position 、destination array 、destination start position 、および length を指定するだけです

        System.arraycopy(src, srcPos, dest, destPos, length);
        byte [] dest= new byte [6000];
        System.arraycopy(src, 0, dest, 0, 6000);
于 2013-06-08T20:22:15.697 に答える