Java中如何将自带toByteArray方法的对象数组转换为byte[]数组
你原始的写法得到的是byte[][]二维数组,每个元素对应原对象的字节数组,无法直接得到目标一维字节数组。最简单的实现方式如下:
方案1:标准库循环拼接(优先推荐)
无需引入第三方依赖,写法简单可读性高,性能也最优:
import java.io.ByteArrayOutputStream; // 核心逻辑 ByteArrayOutputStream baos = new ByteArrayOutputStream(); for (Foo foo : fooArray) { baos.write(foo.toByteArray()); } byte[] fullByteArray = baos.toByteArray();
注:ByteArrayOutputStream的write方法本身不需要处理IO异常,关闭方法也为空实现,不需要额外加try-with-resources或者异常捕获逻辑。
方案2:Stream流式写法
如果你的项目要求统一用流式编码,可以用如下实现:
import java.util.Arrays; import java.io.ByteArrayOutputStream; byte[] fullByteArray = Arrays.stream(fooArray) .map(foo -> foo.toByteArray()) .collect( ByteArrayOutputStream::new, (baos, bytes) -> baos.writeBytes(bytes), (baos1, baos2) -> baos1.writeBytes(baos2.toByteArray()) ) .toByteArray();
如果允许使用Guava等工具库,还可以用Bytes.concat()方法直接拼接所有字节数组,写法会更简洁。
内容的提问来源于stack exchange,提问作者MKue
相关产品推荐
相关产品推荐

