在字节数组后追加字节

时间:2015-06-11 09:20:32

标签: java

我有一个字节数组。但我想要数组长度mod 4 = 0。所以我想在数组之后添加00直到通过条件。 我找到了很多附加数组的解决方案

byte[] arr_combined = new byte[arr_1.length + arr_2.length];
System.arraycopy(arr_1, 0, arr_combined, 0, arr_1.length);
System.arraycopy(arr_2, 0, arr_combined, arr_1.length, arr_2.length);

但我不想创建新的字节数组。我只想在字节数组之后追加字节。感谢

2 个答案:

答案 0 :(得分:2)

如前所述,Java数组具有固定大小,在创建数组后无法更改。在您的情况下,可以使用ByteArrayOutputStream

ByteArrayOutputStream out = new ByteArrayOutputStream();
out.write(arr_1);
out.write(arr_2);
byte[] arr_combined = out.toByteArray();

这样您就可以使用原始byte类型(与List<Byte>不同),这样效率更高。缺点是ByteArrayOutputStream是同步的,因此有一些同步开销(虽然我猜它比使用List<Byte>时的装箱/拆箱开销要低得多)。另一个缺点是声明ByteArrayOutputStream.write抛出IOException。在实践中,它永远不会抛出,但你必须抓住/重新抛出它。

如果您不介意使用第三方库,那么有很多方法可以为没有这些缺点的原始类型创建方便的包装器。例如,来自Trove库的TByteArrayList

答案 1 :(得分:0)

如果您有阵列,则无法修改它的长度。你应该使用ArrayList:

List<Byte> bytes = new ArrayList<Byte>();

您可以在此处使用add方法在任意位置添加新元素,假设b它是byte变量:

bytes.add(b);

因此,通过这种方式,您可以添加所需的00个数,而不管ArrayList的长度。

编辑:我现在看到question,您可以将ArrayList完成后转换为array,如下所示:

Byte[] arrayBytes = bytes.toArray(new Byte[bytes.size()]);

我希望它对你有帮助!