Java 在字节数组后追加字节

Java 在字节数组后追加字节,java,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

我有一个字节数组。但是我想要数组长度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);

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

如果你有一个数组,你不能修改它的长度。您应该使用ArrayList:

List<Byte> bytes = new ArrayList<Byte>();
因此,通过这种方式,无论
ArrayList
的长度如何,都可以添加所需的00

编辑:我现在看到,当您完成
数组列表时,可以将其转换为
数组
,如下所示:

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

我希望这对你有帮助

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

ByteArrayOutputStream out = new ByteArrayOutputStream();
out.write(arr_1);
out.write(arr_2);
byte[] arr_combined = out.toByteArray();
通过这种方式,您可以使用原语
字节
类型(不同于
列表
),这将更加有效。缺点是,
ByteArrayOutputStream
是同步的,因此同步会有一些开销(尽管我想这比使用
列表时的装箱/拆箱开销要低得多)。另一个缺点是,
ByteArrayOutputStream.write
被声明为抛出
IOException
。在实践中,它从未被抛出,但你必须抓住/重新抛出它


如果您不介意使用第三方库,有很多方法可以在基本类型上创建方便的包装器,这些基本类型没有这些缺点。例如,来自Trove库。

数组具有固定长度。如果你想追加和更改大小,请使用
列表
我将计算首选长度,使用该结果创建一个新数组,并填充数据。正如DragonDraik所说,使用列表,一旦完成,将其转换为数组。这会容易得多。字节[]如何转换为字节[]?@ArthurEirich如果你有一个名为
newBytes
的字节[]数组,你可以这样做:
newBytes.toPrimitive(arrayBytes,这里是null时要设置的值)
ByteArrayOutputStream out = new ByteArrayOutputStream();
out.write(arr_1);
out.write(arr_2);
byte[] arr_combined = out.toByteArray();