繁体   English   中英

如何在Java中隐藏字节数组

[英]How to concatinate byte array in java

用Java将两个字节数组连接起来的简单方法是什么? 我使用了此功能,但出现错误:

java.lang.ArrayIndexOutOfBoundsException:16

我的职能是:

public static byte[] concatinate(byte[] a, byte[] b) {
    byte[] c = new byte[100];
    for (int i = 0; i < (a.length + b.length); i++) {
        if (i < a.length) {
            c[i] = a[i];
        } else {
            c[i] = b[i];
        }
    }
    return c;
}

首先,如果a.length + b.length > 100 ,您的代码必然会失败。 您应该使用a.length + b.length作为c的长度。

是的,因为当您超过a.length ,您仍在尝试使用b[i] 假设a.length为50,b.length为1。您要填充51个数组元素,但是要填充c [50],则需要b [0],而不是b [50]。

您只需更改以下内容:

c[i] = b[i];

对此:

c[i] = b[i - a.length];

...或者按照Mureinik的回答有两个循环。 (我不希望任何一个选项都比另一个选项快得多,而且它们绝对是等效的-您可以使用最容易阅读的选项。)

但是,我建议改用System.arraycopy

public static byte[] concatenate(byte[] a, byte[] b) {
    byte[] c = new byte[a.length + b.length];
    System.arraycopy(a, 0, c, 0, a.length);
    System.arraycopy(b, 0, c, a.length, b.length);
    return c;
}

简单得多:)

只需定义的阵列结合的两个阵列的大小,并单独迭代它们:

public static byte[] concatinate(byte[] a, byte[] b) {
    byte[] c = new byte[a.length + b.length];
    for (int i = 0; i < a.length; i++) {
        c[i] = a[i];
    }

    for (int i = 0; i < b.length; i++) {
        c[a.length + i] = b[i];
    }

    return c;
}

追加2 byte []的代码很好。如果您想继续追加byte [],则可以使用此代码。

byte [] readBytes; //您的字节数组.... //例如 readBytes =“ TestBytes” .getBytes();

ByteArrayBuffer mReadBuffer = new ByteArrayBuffer(0); //而不是0,如果您知道期望的字节数,可以在此处输入

mReadBuffer.append(readBytes,0,readBytes.length); //这会将所有字节从readBytes字节数组复制到mReadBuffer //任何新的readBytes条目,您都可以在这里通过重复相同的调用来追加。

//最后,如果要将结果转换为byte []形式:byte [] result = mReadBuffer.buffer();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM