首页 > 解决方案 > 有没有一种简单的方法可以将 Iterator[Byte] 懒惰地转换为输入流?

问题描述

给定一个 Iterator[Byte] 我可以在不将整个 Iterator 物化到内存中的情况下生成一个 InputStream 吗?

标签: scala

解决方案


如果您使用的是 Scala,则有一个单行解决方案:

scala> import java.io.InputStream
                                                                                                                                                                           
scala> val itr = Iterator.range(0, 10).map(_.toByte)
val itr: Iterator[Byte] = <iterator>

scala> val ins: InputStream = () => if(itr.hasNext) itr.next & 255 else -1  // Here it is, or
//     val ins: InputStream = () => itr.nextOption.fold(-1)(_ & 255)
val ins: java.io.InputStream = anon$1@5dc218e2

scala> ins.readAllBytes()
val res0: Array[Byte] = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

推荐阅读