我有一个字节数组。但我想要数组长度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);
但我不想创建新的字节数组。我只想在字节数组之后追加字节。感谢
答案 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()]);
我希望它对你有帮助!