将字节数组转换为 IntStream 的最佳方法是什么?

2024-01-11

Java 8 有 java.util.stream.Stream 和 java.util.stream.IntStream 类型。 java.util.Arrays 有一个方法

IntStream is = Arrays.stream(int[])

但没有这样的方法可以从 byte[]、short[] 或 char[] 生成 IntStream,将每个元素扩展为 int。是否有一种惯用/首选的方法从 byte[] 创建 IntStream,以便我可以以功能方式操作字节数组?

我当然可以手动将 byte[] 转换为 int[] 并使用 Arrays.stream(int[]) 或使用 IntStream.Builder:

public static IntStream stream(byte[] bytes) {
   IntStream.Builder isb = IntStream.builder();
   for (byte b: bytes) 
       isb.add((int) b); 
   return isb.build();
}

但由于复制源代码,两者都不是很有用。

似乎也没有一种简单的方法可以将 InputStream(或者在本例中为 ByteArrayInputStream)转换为 IntStream,这对于处理 InputStream 功能非常有用。 (明显的遗漏?)

有没有一种更实用、高效、不复制的方式?


 byte[] bytes = {2, 6, -2, 1, 7};
 IntStream is = IntStream.range(0, bytes.length).map(i -> bytes[i]);

 ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes);
 IntStream is2 = IntStream.generate(inputStream::read).limit(inputStream.available());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将字节数组转换为 IntStream 的最佳方法是什么? 的相关文章

随机推荐