将Java java.util.Stream <byte>转换为字节数组

时间:2018-02-23 09:52:09

标签: java

我需要将流(Java 8流,而不是InputStream)转换为字节数组。

我尝试使用toArray的{​​{1}}方法,但它不接受Stream,因为byte[]::new是原始类型。

我也尝试使用byte的{​​{1}}方法,但它不接受参数,它假设您想要获得toArray

可以将流转换为列表或盒装IntStream类型的数组,然后将其转换为int[],但我想知道是否有更好的方法。

编辑:添加代码,如果这有助于理解问题。这不编译,它只是伪代码。如果有帮助,您也可以将Byte视为byte[],出于我的目的,这无关紧要。

IntStream

1 个答案:

答案 0 :(得分:0)

我猜你可以从原始流的各个条目中创建byte[],然后最后将它们连接起来。

static byte[] <T> toByteArray(Stream<T> stream, Function<T, byte[]> transform) {
    Stream<byte[]> arrayStream = stream.map(transform);
    arrayStream.collect(concatArrays);
}

但是,我能想到的concatArrays收集器的唯一实现是:

  • 维护包含已收集数据的byte[]
  • 对于Stream的每个条目,将其展开以容纳新条目
  • 使用System.arraycopy组合数组

我希望你最好用你的拳击Byte然后转换&#34;在几乎所有情况下。