FS2:如何从FS2.Stream中获得java.io.InputStream



假设我有val fs2Stream: Stream[IO, Byte],并且我需要调用一些需要java.io.InputStream的Java库。

我想我对FS2太陌生了,但我似乎找不到答案。我尝试过使用fs2.io.toInputStreamfs2.io.readInputStream,但我不知道如何提供一些所需的参数。我在全能的谷歌上搜索过答案,但自从大多数人上次寻找答案以来,API似乎已经改变了。

我该怎么做下面这样的事情呢?

def myFunc(data: fs2.Stream[IO, Byte]): InputStream[Byte] = someMagicalFunction(data)

您可能想要这样的东西:

import cats.effect.{ContextShift, IO, Resource}
import java.io.InputStream
def myFunc(data: fs2.Stream[IO, Byte])
(implicit cs: ContextShift[IO]): Resource[IO, InputStream] =
data.through(fs2.io.toInputStream).compile.resource.lastOrError

然后你可以像这样使用它:

object JavaApi {
def foo(is: InputStream): IO[Unit] = ???
}
object Main extends IOApp {
def data: fs2.Stream[IO, Byte] = ???
override def run(args: List[String]): IO[ExitCode] =
myFunc(data).use(JavaApi.foo).as(ExitCode.Success)
}

这是一个运行代码的Scastie

相关内容

  • 没有找到相关文章

最新更新